• JAVA设计模式之模板模式


     1 public abstract  class RefreshBeverage {
     2         
     3     public final void prepareBeverageTemplate(){
     4 
     5         boilWater();
     6         brew();
     7         pourInCup();
     8         if(isAddCondiments()){
     9             addCondiments();    
    10         }    
    11     }
    12     //钩子函数,提供一个默认或空的实现;具体的子类可以自行决定是否挂钩以及如何挂钩
    13     protected boolean isAddCondiments() {
    14         
    15         return true;
    16     }
    17     private void boilWater(){
    18         System.out.println("1。。。。。。。");    
    19     }
    20     protected abstract void brew();
    21     
    22     private void pourInCup(){
    23         System.out.println("3.。。。。。。。");    
    24     }
    25     protected abstract void addCondiments(); 
    26 }
    抽象基类,为所有子类提供一个算法框架
     1 public class Coffee extends RefreshBeverage{
     2 
     3     @Override
     4     protected void brew() {
     5         System.out.println("2.coffee泡制方式");
     6         
     7     }
     8 
     9     @Override
    10     protected void addCondiments() {
    11         System.out.println("4.coffee");
    12         
    13     }
    14 
    15 }
    16 
    17 public  class Tea extends RefreshBeverage{
    18 
    19     @Override
    20     protected void brew() {
    21         System.out.println("2.teaaa");    
    22     }
    23 
    24     @Override
    25     protected void addCondiments() {
    26         
    27     }
    28     //子类通过覆盖的形式选择挂载钩子函数
    29     @Override
    30     protected boolean isAddCondiments() {    
    31         return false;
    32     }
    33 }
    实现类
     1 public class Test {
     2     
     3     /**
     4      * 模板方法模式的实现要素
     5      * 准备一个抽象类,将部分逻辑以具体方法的形式实现,
     6      * 然后声明一些抽象方法交由子类实现剩余逻辑,
     7      * 用钩子方法给予子类更大的灵活性。
     8      * 最后将方法总构成一个不可改变的模板方法
     9      * 
    10      * 适用场景
    11      * 1.算法或操作遵循相似的逻辑
    12      * 2.重构时(把相同的代码抽象到父类中)
    13      * 3.重要、复杂的算法,核心算法设计为模板算法
    14      * 
    15      * 优点
    16      * 1.封装性好    2.复用性好    3.屏蔽细节    4.便于维护
    17      * 缺点
    18      * 继承
    19      * */
    20     public static void main(String[] args) {
    21         RefreshBeverage coffee = new Coffee();
    22         coffee.prepareBeverageTemplate();
    23         
    24         System.out.println();
    25         RefreshBeverage tea = new Tea();
    26         tea.prepareBeverageTemplate();
    27     }
    28 }
    测试类
  • 相关阅读:
    PHP开发者常犯的MySQL错误
    linux 用户管理
    php中mysql数据库异步查询实现
    PHP 安全相关 简单知识
    js倒计时 网上流传最多的
    TP学习笔记
    Java Map
    Java集合技巧
    Java集合之HashSet/TreeSet原理
    Java Set
  • 原文地址:https://www.cnblogs.com/wwzyy/p/5045905.html
Copyright © 2020-2023  润新知