内容简介:在生活中有些事情的流程是一致的,只是其中的某些步骤不一致,这就是一个模板,比如银行办理业务.进门取号 ----> 填写单据 ----> 等待叫好 ----> 窗口办理填写单据这一步骤就是不同的地方.
什么是模板方法模式
在生活中有些事情的流程是一致的,只是其中的某些步骤不一致,这就是一个模板,比如银行办理业务.
进门取号 ----> 填写单据 ----> 等待叫好 ----> 窗口办理
填写单据这一步骤就是不同的地方.
项目中的模板方法模式:一个抽象类中,有一个主方法,在定义多个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,不同子类的重写内容可以不同,通过调用抽象类,实现对子类的调用.
如何实现模板方法模式
例子:
泡咖啡:把水煮沸 --> 沸水冲泡咖啡 --> 咖啡倒进杯子 --> 加糖加奶
泡茶:把水煮沸 --> 沸水浸泡茶叶 --> 茶倒进杯子 --> 加柠檬
分析:冲泡和浸泡都是泡,加糖加奶加柠檬都是加料
创建一个抽象类,在里面定义模版方法和其他的方法
public abstract class BubbleBeverage { //定义模版方法,注意需要final修饰,不允许外界修改模版框架 public final void beverageTemplate(){ //1.煮沸水 boilWater(); //2.泡制 brew(); //3.倒入杯子 pourInCup(); //4.加料 addSomething(); } //需要在子类中实现的方法 protected abstract void addSomething(); private void pourInCup() { System.out.println("将饮料倒入杯子中"); } //需要在子类中实现的方法 protected abstract void brew(); private void boilWater() { System.out.println("将水煮沸"); } } 模版类的子类 子类A: //定义一个子类实现茶的泡制 public class TeaBeverage extends BubbleBeverage{ @Override protected void addSomething() { System.out.println("加柠檬"); } @Override protected void brew() { System.out.println("用沸水浸泡茶叶"); } 子类B: import cn.wxdl.abstracts.BubbleBeverage; //定义一个子类实现咖啡的制备 public class CoffeeBeverage extends BubbleBeverage{ @Override protected void addSomething() { System.out.println("加糖加奶"); } @Override protected void brew() { System.out.println("用沸水冲泡咖啡"); } } 测试类: public class TestDemo { public static void main(String[] args) { testCoffee(); System.out.println("-------------------------"); testTea(); } public static void testCoffee(){ BubbleBeverage beverage = new CoffeeBeverage(); System.out.println("开始制备咖啡"); beverage.beverageTemplate(); System.out.println("咖啡制备完成"); } public static void testTea(){ BubbleBeverage beverage = new TeaBeverage(); System.out.println("开始泡制茶"); beverage.beverageTemplate(); System.out.println("茶泡制完成"); } } 复制代码
模板方法模式的特点
算法或操作遵循相似的逻辑
重构时(将相同的代码抽取到父类中)
重要,复杂的算法,核心算法设计为模版算法
优点:
1.封装性好
2.复用性好
3.屏蔽细节
4.便于维护
总结
模版方法模式的实现要素:抽象基类和具体子类
抽象基类中有共性的方法(已实现)和抽象方法(只知道原则不知道细节),还有模版方法
note:交人交心,浇花浇根。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。