我需要一个可以在具体形状(例如圆形)上运行的“处理器”类的单一集合(我刚好在使用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();
}
}