我需要一个可以在具体形状(例如圆形)上运行的“处理器”类的单一集合(我刚好在使用Java)。一些类可以对抽象形状进行操作,而其他一些则需要具体的圆类。

问题是,我不知道可用于避免诸如CircleSaver之类的适配器类的任何语言或设计机制。如果无法避免,我将为每个需要具体形状的处理器类创建一个适配器方法。

这个问题/模式有名称吗?有解决方案吗?

List<CircleProcessor> circleProcessors = new ArrayList<CircleProcessor>
 (Arrays.asList(new CircleDrawer(), new CircleSaver()));

interface ShapeProcessor {
    void execute(Shape circle);
}

interface CircleProcessor {
    void execute(Circle circle);
}

class CircleDrawer implements CircleProcessor {
    public void execute(Circle circle) {
        // Draw circle
    }
}

class ShapeSaver implements ShapeProcessor {
    public void execute(Shape shape) {
        shape.save();
    }
}

// Adapter method that I would love to avoid
class CircleSaver implements CircleProcessor {
    public void execute(Circle circle) {
        new ShapeSaver().execute(circle);
    }
}

最佳答案

提出问题后,我想我想出了一个使用泛型的更好版本。如果有更好的解决方案和/或此问题的名称,请告诉我!

    List<ShapeProcessor<Circle>> circleProcessors = new ArrayList<ShapeProcessor<Circle>>(
 Arrays.asList(new CircleDrawer(), new ShapeSaver<Circle>()));

public interface ShapeProcessor<T extends Shape> {
    void execute(T t);
}

public class CircleDrawer implements ShapeProcessor<Circle> {
    @Override
    public void execute(Circle circle) {
        // Draw circle
    }
}

public class ShapeSaver<T extends Shape> implements ShapeProcessor<T> {
    @Override
    public void execute(T t) {
        t.save();
    }
}

10-08 11:40