我有一个抽象类A和它的几个实现。我期望通过添加更多的实现来随着时间的推移而发展。哪种设计模式允许基于运行时类型的功能抽象?
我也有一个接口,在上面的类层次结构的实例(例如打印它们)做一些事情。
我希望接口的实现为A的某些子类提供一些特殊功能,并为其余的子类提供默认功能。
我希望这个例子阐明事情:
abstract class A { }
class B extends A { }
class C extends A { }
interface Processor {
public void process(A a);
}
class SimpleProcessor implements Processor {
//I want this to be called when argument is instance of A or C or any
//new class that will be added in the future
public void process(A a) {
//Line 14
System.out.println("Default processing");
}
//I want this to be called when argument is instance of B
public void process(B b) {
System.out.println("Special processing");
}
}
public class Runner {
public static void main(String[] args) {
B b = new B();
Processor p = new SimpleProcessor();
p.process(b);
}
}
的示例打印 “默认处理”。问题是要执行的方法是根据接口方法的编译时类型来选择的。有没有一种方法(或设计模式),使这个程序打印“特别处理”,而不在第14行加入
if (a instance of B)
process((B) a);
列表为每一个需要特别处理类?
我看了一下visitor模式,但它看起来没有什么改进,因为我不想用A的每个子类的方法“污染”处理器接口,因为会添加更多的A子类。
换一种方式,我想接口的实现:
- 提供的
- 具体子类的方法的自定义实现提供了将在被添加类的默认实现未来
- 避免列出所有的类在一个大的if-then-else的列表
谢谢!
你正在寻找的模式被称为“可覆盖的方法”... – 2010-07-14 10:58:11
策略模式? – 2010-07-14 13:27:37
谢谢大家的回复。我最终使用了if-then-else语句测试的例子列表。 – idrosid 2010-07-15 08:00:57