您的位置:首页 > 其它

设计模式学习二、模板方法模式

2017-11-01 11:29 232 查看
一、什么是模板方法模式

            模板设计方式:在一个方法中定义一个算法骨架,而将一些方法的实现放到子类中,这样使在不改变算法结构的情况下,重新定义算法中的一些步骤

                ps:什么是模板,简单点说就是一个方法,这个方法定义了一组算法步骤。任何步骤都可以是抽象的,这些抽象的方法由子类来实现。

二、使用场景

               多个类有共同的方法步骤,可以将这些共同的方法放在父类中,不同的实现设为抽象方法,由子类实现。

三、模式构成(网上扒的图,,)

                       

                 


四、举个例子

 

abstract  class Make{

/*
* 这是模板方法,里面定义了两个抽象的方法,
* 这两个方法的实现可以在子类中完成,以此在不破坏算法框架代码
* 结构的情况下,能完成任务
* */
public  void makeDrink(){
boil();
addMaterial();//具体的实现放在子类里
addOther();具体的实现放在子类里
close();
hook();//这个等会解释
}

public void boil(){
System.out.println("烧水~~~");
}
public abstract void addMaterial();
public abstract  void addOther();
public void close(){
System.out.println("盖盖子~~~");
}
public void hook(){}
}
//对于抽象方法的具体实现
class  MakeCoffee extends Make{

@Override
public void addMaterial() {
System.out.println("添加咖啡豆");
}

@Override
public void addOther() {
System.out.println("加点糖");
}
}
//抽象方法的具体实现
class MakeTea extends Make{

@Override
public void addMaterial() {
System.out.println("添加茶叶");
}

@Override
public void addOther() {
System.out.println("加点柠檬片");
}
//稍后解释,为了扩展功能
@Override
public void hook() {
System.out.println("滤掉茶叶");
}
}
public class Template1 {
public  static  void main(String args[]){
Make coffee=new MakeCoffee();
Make tea=new MakeTea();
coffee.makeDrink();
tea.makeDrink();
}
}
烧水~~~
添加咖啡豆
加点糖
盖盖子~~~
烧水~~~
添加茶叶
加点柠檬片
盖盖子~~~
滤掉茶叶


五、补充 

        1)为了防止模板方法被修改,可以将模板方法设置为final

        2)hook的作用:

                   hook为钩子,它在父类中实现,却没有任何内容,作用是为了方便扩展与补充,如果子类需要一些特定的行为,可以定义hook的内容,如果不需要,完全可以置之不理。

           ps:菜鸟一枚,如有不对请大佬指出,谢谢谢谢~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: