模板方法模式

来源:互联网 发布:程序员被骗婚女方 编辑:程序博客网 时间:2024/05/22 00:14
模板方法的定义
        Define the skeleton of an algorithm in an operation ,deferring some steps to subclasses.
Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类在不改变算法机构的情况下,重新定义算法中的步骤。

模板方法模式是用来创建一个算法的模板,模板有一个方法构成,更具体的说,这个方法将算法定义一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。

类图:


模板方法模式是用来创建一个算法的模板,模板有一个方法构成,更具体的说,这个方法将算法定义一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。
结构特点:
    1.模板类必须为抽象类
    2.模板方法必须为final类型

星巴兹咖啡冲泡过程
1.把水煮开
2.用沸水冲泡咖啡
3.把咖啡倒进杯子
4.加糖和牛奶

星巴兹茶冲泡过程
1.把水煮沸
2.用沸水浸泡茶叶
3.把茶倒进杯子
4.加柠檬
注意:这两种冲泡方法采用了相同的算法。所以进行泛化后可采用相同的模板方式
1.将水煮沸
2.冲泡
3.把饮料倒进杯子
4.加调料
/*** * 模板方法类,定义饮料泡澡的全过程的算法 * @author jiazq * */public abstract class CaffeineBeverage { /**  * 模板方法 --制造饮料全过程  */ final void prepareRecipe(){  boilWater();  brew();  pourInCup();  addCondiments(); }  private void pourInCup() {  System.out.println("将饮料倒入杯子中 ");   } private void boilWater() {  System.out.println("开水");   }   abstract void brew();   abstract void addCondiments();}

/** * 子类--咖啡 * @author jiazq * */public class Coffee extends CaffeineBeverage {@Overridevoid addCondiments() {System.out.println("。。最后放入牛奶和糖进去。。。");}@Overridevoid brew() {System.out.println("。。注入咖啡进去。。。");}}

/** * 子类--茶  * @author jiazq * */public class Tea extends CaffeineBeverage{@Override void addCondiments() {System.out.println("。。最后放些柠檬进去。。。");}@Override void brew() {System.out.println("放入茶叶....");}}

public class TempleTest {public static void main(String args[]){Tea  tea = new Tea();  //创建一杯茶tea.prepareRecipe();Coffee coffee = new Coffee();  //创建一杯咖啡coffee.prepareRecipe();}}

测试结果:




模板方法模式是用来创建一个算法的模板,模板有一个方法构成,更具体的说,这个方法将算法定义一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。
0 0
原创粉丝点击