模板方法模式java
时间: 2023-11-04 21:00:34 浏览: 56
模板方法模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的具体实现留给子类去完成。在模板方法模式中,抽象类定义了一个模板方法,该方法中包含了算法的整体流程,同时也定义了一些基本方法和钩子方法供子类实现或重写。
在Java中,可以通过抽象类和具体子类来实现模板方法模式。抽象类负责定义模板方法以及基本方法和钩子方法,而具体子类则负责实现或重写这些方法。
下面是一个示例代码:
```java
// 抽象类/抽象模板角色
public abstract class AbstractClass {
// 模板方法
public void TemplateMethod() {
SpecificMethod();
if (hookMethod()) {
abstractMethod();
}
}
// 具体方法
public void SpecificMethod() {
System.out.println("抽象类中的具体方法被调用...");
}
// 钩子方法
public boolean hookMethod() {
return false;
}
// 抽象方法
public abstract void abstractMethod();
}
// 具体子类/具体实现角色
public class ConcreteClass extends AbstractClass {
@Override
public boolean hookMethod() {
return true;
}
public void abstractMethod() {
System.out.println("抽象方法的实现被调用...");
}
}
// 客户端角色
public class Client {
public static void main(String[] args) {
AbstractClass ac = new ConcreteClass();
ac.TemplateMethod();
}
}
```
总结:
1. 优点:利用模板方法将相同处理逻辑的代码放到抽象父类中,可以提高代码的复用性。不同的代码在不同子类中,通过对子类的扩展增加新的行为,提高代码的扩展性。把不变的行为写在父类上,去除子类的重复代码,提供了一个很好的代码复用平台,符合开闭原则。
2. 缺点:类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度。父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。由于继承关系自身的缺点,如果父类添加新的抽象方法,则所有子类都要改一遍。