文章目录
1.例子2. 定义3. 应用3.1 优点3.2 缺点3.3 场景
4. 扩展
参考:设计模式之禅
1.例子
public abstract class HummerModel {
public abstract void start();
public abstract void stop();
public abstract void engineBoom();
public abstract void alarm();
public void run() {
this.start();
this.engineBoom();
this.alarm();
this.stop();
}
}
public class HummerH1Model extends HummerModel {
@Override
public void start() {
System
.out
.println("H1 model start");
}
@Override
public void stop() {
System
.out
.println("H1 model stop");
}
@Override
public void engineBoom() {
System
.out
.println("H1 model engineBoom");
}
@Override
public void alarm() {
System
.out
.println("H1 model alarm");
}
}
public class HummerH2Model extends HummerModel {
@Override
public void start() {
System
.out
.println("H2 model start");
}
@Override
public void stop() {
System
.out
.println("H2 model stop");
}
@Override
public void engineBoom() {
System
.out
.println("H2 model engineBoom");
}
@Override
public void alarm() {
System
.out
.println("H2 model alarm");
}
}
public class Client {
public static void main(String
[] args
) {
HummerH1Model hummerH1Model
= new HummerH1Model();
HummerH2Model hummerH2Model
= new HummerH2Model();
hummerH1Model
.run();
hummerH2Model
.run();
}
}
2. 定义
个人理解:一个算法的实现有固定的步骤,比如上面的run()方法有start,stop,alarm和engineBoom这几个基本方法。在抽象类定义这些基本方法,然后模板方法(run方法)调用这些基本方法。子类继承抽象类,由子类实现基本方法。子类的行为就能影响父类。
3. 应用
3.1 优点
封装不变部分,扩展可变部分:模板方法就是不变部分,基本是可变部分,由不同的子类实现。提取公共代码,便于维护:模板方法在父类中,不会散发到各处。行为父类控制,子类实现。
3.2 缺点
模板方法模式与一般的模式不同,子类的实现影响父类,在复杂的项目,带来阅读的困难。
3.3 场景
多个子类共有的方法,逻辑基本相同;重要,复杂的算法,可以把核心算法封装模板方法,基本方法的细节由各个子类实现。
4. 扩展