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



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

        在该设计模式中,具有两大类方法:模板方法,步骤方法。
          步骤方法又根据其实现情况,分为三种:抽象方法、最终方法、钩子方法。
              抽象方法:要求子类必须要实现的方法。
              最终方法:由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

  • 相关阅读:
    这是个神奇的博客
    Tomcat Access Log 的格式
    CA证书
    记一次性能调优
    web系统能力培养计划
    金融知识学习
    读《华为区块链白皮书》
    马未都说收藏:陶瓷篇(8、9)元青花、永宣青花
    阿里历年面试试题
    回车(CR)换行(LF)的来历及区别
  • 原文地址:https://www.cnblogs.com/x-ph/p/7436747.html
Copyright © 2020-2023  润新知