结合案例深刻解析模板方法设计模式

1、基本概念

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,而后声明一些抽象方法来迫使子类实现剩余的逻辑。不一样的子类能够以不一样的方式实现这些抽象方法,从而对剩余的逻辑有不一样的实现。这就是模板方法模式的用意。算法

例如: 在现实生活中,完成某件事情是须要 n 个固定步骤的。如"在淘宝进行购物"这件事情的完成通常须要三个步骤: 登陆网站、挑选商品、 付款。但对于登陆网站与付款这两步,每一个人几乎都是相同的操做。但不一样的地方是,每一个人所挑选的商品是不一样的。 在软件开发过程当中一样存在这样的状况。某类的某个方法的实现,须要几个固定步骤。在这些固定步骤中,对于该类的不一样对象, 有些步骤的实现是固定不变的,有些步骤的实现是截然不同的,有些步骤的实现是可变可不变的。对于这种状况,就适合使用模板方法设计模式编程。

2、结构

基本结构:编程

在模板方法设计模式中,存在一个父类(通常是抽象的)。其中包含 两类方法: 模板方法 和 3 种步骤方法;设计模式

  • 模板方法: 即实现某种算法的方法步骤。这些步骤都是调用的步骤方法实现的。
  • 步骤方法:即完成模板方法的每一个阶段性方法。
    • 抽象方法: 子类必须实现的方法。即子类的个性化定义;
    • 最终方法(固定方法): 子类不能重写的方法,即全部子类都要作的步骤;
    • 钩子方法: 父类给了默认实现,子类能够重写,也能够不重写的方法;

 

结构:并发

 

 

3、案例

实如今网站上购物的案例。

基本逻辑图:分布式

 

 

代码:ide

首先看Shopping类:函数

public abstract class Shopping {

    // 模板方法
    public void buyGoods(){
        useLogin(); //固定的方法,子类不能重写
        buy();      //抽象方法,子类必须实现
        pay();      //钩子方法(hook),子类能够重写
    }

    // 固定方法(最终方法)
    public final void useLogin() {
        System.out.println("用户登陆");
    }

    //抽象方法
    public abstract void buy();

    // 钩子方法
    public void pay(){
        System.out.println("使用银联支付");
    }
}

 

而后是两个子类:高并发

public class ShoesShopping extends Shopping {
    @Override
    public void buy() {
        System.out.println("购买Nike鞋子!!!!");
    }
}
public class ClothesShopping extends Shopping {
    @Override
    public void buy() {
        System.out.println("购买海澜之家男装!!!!!");
    }

    // 重写了钩子方法
    @Override
    public void pay() {
        System.out.println("使用支付宝支付");
    }
}

 

测试:测试

public class MyTest {

    public static void main(String[] args){
        Shopping shoesShopping = new ShoesShopping();
        shoesShopping.buyGoods();

        System.out.println("-----------------------");
        Shopping clothesShopping = new ClothesShopping();
        clothesShopping.buyGoods();
    }
}

 

输出:网站

用户登陆
购买Nike鞋子!!!!
使用银联支付

 

-----------------------
用户登陆
购买海澜之家男装!!!!!
使用支付宝支付

4、总结

有时候为了防止恶意操做,模板方法也会加上 final 关键词。

免费Java高级资料须要本身领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门:
相关文章
相关标签/搜索