美文网首页工作生活
实践之路《模板方法模式》

实践之路《模板方法模式》

作者: 菜根_ | 来源:发表于2019-07-02 10:09 被阅读0次
1. 定义

定义一个模板结构,将具体内容延迟到子类去实现。

2. 主要作用

在不改变模板结构的前提下在子类中重新定义模板中的内容。模板方法模式是基于”继承“的;

3. 解决的问题

提高代码复用性,将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中,实现了反向控制
通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 & 符合“开闭原则”

4. 实例讲解

背景:学炒菜:酸辣土豆丝 & 辣炒花蛤
冲突:两道菜的炒菜步骤有的重复有的却差异很大,记不住
解决方案:利用代码记录下来

步骤一: 创建抽象模板结构(Abstract Class):炒菜的步骤

public  abstract Eatclass Abstract Class {  
//模板方法,用来控制炒菜的流程 (炒菜的流程是一样的-复用)
//申明为final,不希望子类覆盖这个方法,防止更改流程的执行顺序 
        final void DrinkProcess(){  
        //第一步:倒水
        this.pourOil();
        //第二步:热油
         this.HeatOil();
        //第三步:倒菜
         this.pourVegetable();
        //第四步:倒调味料
         this.pourSauce();
        //第五步:翻炒
         this.fry();
    }  

//定义结构里哪些方法是所有过程都是一样的可复用的,哪些是需要子类进行实现的

//第一步:倒油是一样的,所以直接实现
void pourOil(){  
        System.out.println("倒油");  
    }  

//第二步:热油是一样的,所以直接实现
    void  HeatOil(){  
        System.out.println("热油");  
    }  

//第三步:倒蔬菜是不一样的(一个下土豆丝,一个是下花蛤)
//所以声明为抽象方法,具体由子类实现 
    abstract void  pourVegetable();

//第四步:倒调味料是不一样的(一个下醋,一个是下辣椒)
//所以声明为抽象方法,具体由子类实现 
    abstract void  pourSauce();


//第五步:翻炒是一样的,所以直接实现
    void fry();{  
        System.out.println("炒到熟");  
    }  
}

步骤二: 创建具体模板(Concrete Class),即”酸辣土豆丝“和” 辣炒花蛤“的具体步骤

//酸辣土豆丝的类
  public class ConcreteClass_TuDouSi extend  Abstract Class{
    @Override
    public void  pourVegetable(){  
        System.out.println(”下锅的蔬菜是土豆丝“);  
    }  
    @Override
    public void  pourSauce(){  
        System.out.println(”下锅的酱料是醋“);  
    }  
}
//辣炒花蛤的类
  public class ConcreteClass_HuaGe extend  Abstract Class{
    @Override
    public void  pourVegetable(){  
        System.out.println(”下锅的蔬菜是花蛤“);  
    }  
    @Override
    public void  pourSauce(){  
        System.out.println(”下锅的酱料是辣椒“);  
    }  
}

步骤三:

public class Template Method{
  public static void main(String[] args){

//炒 - 手撕包菜
    ConcreteClass_BaoCai BaoCai = new ConcreteClass_BaoCai();
    BaoCai.cookProcess();

//炒 - 蒜蓉菜心
  ConcreteClass_ CaiXin = new ConcreteClass_CaiXin();
    CaiXin.cookProcess();
    }
        
}
优点:
  • 提高代码复用性
  • 将相同部分的代码放在抽象的父类中
  • 提高了拓展性
  • 将不同的代码放入不同的子类中,通过对子类的扩展增加新的行为
  • 实现了反向控制
  • 通过一个父类调用其子类的操作,通过对子类的扩展增加新的行为,实现了反向控制 & 符合“开闭原则”
缺点:

引入了抽象类,每一个不同的实现都需要一个子类来实现,导致类的个数增加,从而增加了系统实现的复杂度。

设计模式只能算是一种药,当你的代码出现了问题时才需要吃药。

相关文章

  • 实践之路《模板方法模式》

    1. 定义 定义一个模板结构,将具体内容延迟到子类去实现。 2. 主要作用 在不改变模板结构的前提下在子类中重新定...

  • Android 架构师之路7 设计模式之模板方法模式

    Android 架构师之路 目录 1、模板方法模式概念 1.1 介绍 在模板模式(Template Pattern...

  • 模板方法模式实践

    在实际编程中,会经常遇到多个类中的某些方法实现逻辑类似的情况,这时我们可以将这些类中的相同部分抽象到父类中,对于有...

  • 11.8设计模式-模板模式-详解

    设计模式-模式模式 模板方法模式详解 模板方法模式在android中的实际运用 1.模板方法模式详解 2.模板方法...

  • 模板方法模式

    摘自《JavaScript设计模式与开发实践》 模板方法模式是一种只需使用继承就可以实现的非常简单的模式。 模板方...

  • 第5章 -行为型模式-模板方法模式

    一、模板方法模式的简介 二、模板方法模式的优点 三、模板方法模式的应用场景 四、模板方法模式的实例

  • 模板方法模式

    模板方法模式 模板方法模式的定义 模板方法模式(Template Method Pattern)是如此简单,以致让...

  • 设计模式系列-模板方法模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 模板方法模式 定义 模板方法模式在一个方法中定义了算法...

  • 模板方法模式

    一、模板方法模式介绍 二、模板方法模式代码实例

  • 模板方法模式

    一、概念 二、模板方法模式UML图 三、模板方法模式的2个角色 四、模板方法与基本方法的概念 模板方法: 基本方法...

网友评论

    本文标题:实践之路《模板方法模式》

    本文链接:https://www.haomeiwen.com/subject/gjwacctx.html