模板方法模式

简介: 定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。优点:1.封装不变部分,扩展可变部分 2.提取公共部分代码,便于维护缺点:1.提高了系统的复杂度。


定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

优点:1.封装不变部分,扩展可变部分

          2.提取公共部分代码,便于维护

缺点:1.提高了系统的复杂度。

使用场景:一些方法通用,一些方法不通用,却在每一个子类都重新写了这所有的方法。

类图:

image.png

模板代码:

抽象模板类

1. 
2. static abstract class AbstractTemplate {
3. 
4. //公有方法 但是可以复写 
5. protected void operateA() {
6.             System.out.println("A");
7.         }
8. 
9. protected void operateB() {
10.             System.out.println("B");
11.         }
12. 
13. //不同的方法
14. protected abstract void operateC() ;
15. 
16. // 声明为final方法,避免子类覆写
17. // 固定的步骤
18. public final void templateMehthod() {
19. this.operateA();
20. this.operateB();
21. this.operateC();
22.         }
23.     }

具体实现类A

1. 
2.     static class ConcreteClassA extends AbstractClass {
3. @Override
4. protected void operateC() {
5. System.out.println("C");
6.         }
7.     }

具体实现类B

1. 
2.     static class ConcreteClassB extends AbstractClass {
3. @Override
4. protected void operateB() {
5. System.out.println("B+");
6.         }
7. 
8. @Override
9. protected void operateC() {
10. System.out.println("C");
11.         }
12.     }

栗子

抽象模板类

1. 
2. static abstract class AbstractPlayLol {
3. 
4. protected void openComputer() {
5.             System.out.println("开机了");
6.         }
7. 
8. protected void playGame() {
9.             System.out.println("开始玩");
10.         }
11. 
12. //结果不相同
13. protected abstract void over() ;
14. 
15. // 声明为final方法,避免子类覆写
16. public final void templateMehthod() {
17. this.openComputer();
18. this.playGame();
19. this.over();
20.         }
21.     }

抽象实现

1. 
2.     static class ConcreteClassA extends AbstractPlayLol {
3. 
4. @Override
5. protected void over() {
6. System.out.println("15投");
7.         }
8.     }
1.   static class ConcreteClassB extends AbstractPlayLol {
2. 
3. @Override
4. protected void openComputer() {
5. System.out.println("电脑坏了");
6.         }
7. 
8. @Override
9. protected void playGame() {
10. System.out.println("没玩上");
11.         }
12. 
13. @Override
14. protected void over() {
15. System.out.println("没玩上");
16.         }
17.     }
18. 
19.

调用

1. class Client {
2. public static void main(String[] args) {
3. AbstractPlayLol playA= new ConcreteClassA();
4.         cookVegetable.cook();
5. 
6. AbstractPlayLol playB= new ConcreteClassB();
7.         cookVegetable.cook();
8.     }

 


相关文章
|
2月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
3月前
|
设计模式 算法
模板方法模式
【8月更文挑战第22天】
30 0
|
3月前
|
设计模式 算法
什么是模板方法模式?
【8月更文挑战第22天】
41 0
|
6月前
|
设计模式 算法 Java
Java设计模式——模板方法模式
Java设计模式——模板方法模式
|
设计模式 算法 Java
设计模式-行为型模式:模板方法模式
设计模式-行为型模式:模板方法模式
|
算法 前端开发
关于模板方法模式我所知道的
关于模板方法模式我所知道的
90 0
|
算法 Java 程序员
行为型模式-模板方法模式
行为型模式-模板方法模式
95 0
|
设计模式
我学会了,模板方法模式
模板方法模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
80 0
我学会了,模板方法模式
|
SQL 设计模式 Java
|
设计模式 算法 Java
Java设计模式 ->模板方法模式
Java设计模式 ->模板方法模式
97 0