gpt4 book ai didi

java - 编写异构集合时可以避免适配器类吗?

转载 作者:行者123 更新时间:2023-11-30 11:52:09 25 4
gpt4 key购买 nike

我需要一个单一的“处理器”类集合(我碰巧使用的是 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();
}
}

关于java - 编写异构集合时可以避免适配器类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7051210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com