设计模式之----模板模式


模板方法设计模式
    该设计模式解决的问题是:具有固定算法(步骤)的应用。但这些算法步骤,又针对不同的用户(情况)具有不同的实现方式。

    在该设计模式中,具有两大类方法:模板方法,步骤方法。
      步骤方法又根据其实现情况,分为三种:抽象方法、最终方法、钩子方法。
          抽象方法:要求子类必须要实现的方法。
          最终方法:由final修饰的方法,不能被子类重写的方法。
          钩子方法:具有默认的实现,但可以被子类重写的方法。
一: 设计模板类

    

 1 public abstract class DinnerSever {
 2     //模板方法
 3     public void havingDinner(){
 4     //点餐
 5      order();
 6     //进餐
 7      eat();
 8     //z支付
 9      pay();
10     }
11     //不同的人支付方式不同,但有默认方式现金支付
12     //后边可继承该类并重写该方法..改为其他方式
13     //默认方法
14     public void pay() {
15         System.out.println("正在使用现金支付.....");
16     }
17 //不同点餐吃的方式不同.....此处应该定义为abstract
18     //抽象方法、
19     public abstract void eat();
20     //点餐只能使用ipad.....此方法为唯一且不可变得,用final修饰
21     //最终方法
22     public final void order() {
23         // TODO Auto-generated method stub
24         System.out.println("只能使用ipad点餐.....");
25 //        System.out.println("此方法为底层模板不可变.....");
26     }
27 }
二..定义类实现该模板
  例:模板使用
 1 //中餐服务
 2 public class China extends DinnerSever {
 3 
 4     @Override
 5     //实现抽象方法
 6     public void eat() {
 7         // TODO Auto-generated method stub
 8         System.out.println("来一碗面条.....");
 9     }
10     //重写默认方法
11     @Override
12     public void pay() {
13         System.out.println("中国人可以使用支付宝...微信支付");
14     }
15 }

  模板使用:

 1 public class English extends DinnerSever{
public class Demo {
public static void main(String[] args) {
    China ca = new China();//实现对象
    English eg = new English();
    ca.havingDinner();  //执行方法
    eg.havingDinner();
    }
}

 

 2     //都需要重新eat方法..
 3     @Override
 4     public void eat() {
 5         // TODO Auto-generated method stub
 6         System.out.println("外国人吃西餐..");
 7     }
 8     //默认使用现金支付...此处可以不写
 9     /*@Override
10     public void pay() {
11         // TODO Auto-generated method stub
12 System.out.println("使用");
13     }*/
14 
15 }

三:测试...

 

over

 

posted @ 2017-08-26 23:42  Roomed  阅读(204)  评论(0编辑  收藏  举报