行为型模式:模板方法模式

收藏:

模板方法模式深度解析

 

算法示例:

https://www.cnblogs.com/liaoweipeng/p/5790395.html

定义一个算法骨架,而将这其中的一些步骤延迟到子类中再去实现,

比如面以汽车为例,一个父类为抽象类,其中汽车的启动和停止,这在所有汽车中都有,而每个具体的汽车又不同。

一次性实现算法的不可变的部分,而将可变的部分放在各个子类中去实现。

各个子类中的重复的功能拿到父类中去集中实现,避免代码的重复。

public abstract class CarModel {    
    protected abstract void start();    
    protected abstract void stop();    
    final public void excet(){
        this.start();
        this.stop();
    }
}

public class Ocar extends CarModel{
    @Override
    protected void start() {
        System.out.println("Aodi car start>>>");        
    }
    @Override
    protected void stop() {
        System.out.println("Aodi car stop<<<");    
    }
}

public class Wcar extends CarModel{
    @Override
    protected void start() {
        System.out.println("dazhong che qidong---");    
    }
    @Override
    protected void stop() {
        System.out.println("dazhoing che tingzhi--- ");        
    }
}

public class Client {
    public static void main(String[] args) {
        CarModel wCarModel=new Wcar();
        wCarModel.excet();
        CarModel oCarModel=new Ocar();
        oCarModel.excet();
    }
}
View Code

 

模板方法定义

意思是:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式涉及两个角色。

■ 抽象模板(Abstract Template)角色:

该角色定义一个或多个抽象操作,以便让子类实现;这些抽象操作是基本操作,是一个顶级逻辑的组成步骤。

还需要定义并实现一个或几个模板方法,这些模板方法一般是具体方法,即一个框架,实现对基本方法的调度,完成固定的逻辑。

■ 具体模板(Concrete Template)角色:

该角色实现抽象模板中定义的一个或多个抽象方法,每一个抽象模板角色都可以有任意多个具体模板角色与之对应,

而每一个具体模板角色都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。

 

package com.yl.design.template.example1;
public abstract class AbstractClass {
    //基本方法
    protected abstract void operation();
    //模板方法
    public void templateMethod(){
        //调用基本方法,完成相关逻辑
        this.operation();
    }
}

package com.yl.design.template.example1;
public class ConcreteClass extends AbstractClass {
    //在子类中,实现业务基本逻辑
    @Override
    protected void operation() {
    }
}

package com.yl.design.template.example1;
public class Client {
    public static void main(String[] args) {
        AbstractClass abstractClass=new ConcreteClass();
        abstractClass.templateMethod();
    }
}
View Code

 

模板方法的应用

1. 模板方法模式的优点模板方法模式的优点有以下几个方面。

■ 封装不变的部分,扩展可变部分。不变的部分封装到父类中实现,而可变的部分则可以通过继承进行扩展。

■ 提取公共部分代码,便于维护。将公共部分的代码抽取出来放在父类中,维护时只需要修改父类中的代码。

■ 行为由父类控制,子类实现。模板方法模式中的基本方法是由子类实现的,因此子类可以通过扩展增加相应的功能,符合开闭原则。

2. 模板方法模式的应用场景使用模板方法模式的典型场景如下。

■ 多个子类有公共方法,并且逻辑基本相同时。

■ 可以把重要的、复杂的、核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。

■ 重构时,模板方法模式是一个经常使用的模式,将相同的代码抽取到父类中。

 

 

 

 

posted @ 2019-04-09 14:00  弱水三千12138  阅读(146)  评论(0)    收藏  举报