模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,而后声明一些抽象方法来迫使子类实现剩余的逻辑。不一样的子类能够以不一样的方式实现这些抽象方法,从而对剩余的逻辑有不一样的实现。这就是模板方法模式的用意。算法
例如: 在现实生活中,完成某件事情是须要 n 个固定步骤的。如"在淘宝进行购物"这件事情的完成通常须要三个步骤: 登陆网站、挑选商品、 付款。但对于登陆网站与付款这两步,每一个人几乎都是相同的操做。但不一样的地方是,每一个人所挑选的商品是不一样的。 在软件开发过程当中一样存在这样的状况。某类的某个方法的实现,须要几个固定步骤。在这些固定步骤中,对于该类的不一样对象, 有些步骤的实现是固定不变的,有些步骤的实现是截然不同的,有些步骤的实现是可变可不变的。对于这种状况,就适合使用模板方法设计模式编程。
基本结构:编程
在模板方法设计模式中,存在一个父类(通常是抽象的)。其中包含 两类方法: 模板方法 和 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鞋子!!!! 使用银联支付
-----------------------
用户登陆
购买海澜之家男装!!!!!
使用支付宝支付
有时候为了防止恶意操做,模板方法也会加上 final
关键词。
免费Java高级资料须要本身领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q