新手都能看懂的设计模式——模板方法

转载自:http://www.toutiao.com/a6407964563165200641/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=9400134503&utm_medium=toutiao_android

在面向对象开发过程中,我们会经常遇到这样的情况,处理一类事件有特定的流程,同时这类事件往往又会有某些细节不同,这个时候我们可以使用模板方法的设计模式。

我们通过一个常用的例子来介绍这么一种设计模式。有一个咖啡店他们制作两种饮料,柠檬茶和咖啡,这个制作流程是这样的。

茶的制作过程

烧水-->茶叶-->过滤-->加点柠檬

新手都能看懂的设计模式——模板方法_第1张图片

咖啡的制作过程

烧水-->加咖啡-->过滤-->加点牛奶

新手都能看懂的设计模式——模板方法_第2张图片

一定的抽象

我们发现两个流程其实有一些方法可以进行抽象,例如烧水,过滤。而不能抽象的方法,其实我们可以用子类来重写。

新手都能看懂的设计模式——模板方法_第3张图片

这里的crete我们使用了final声明,是为了不让子类去覆盖掉这个方法。

扩展

现在我们又推出了一种饮料,牛奶,牛奶的过程是这样的。

烧水-->加奶粉-->加点糖

我们发现牛奶是不需要过滤操作的,那么我们怎么去实现呢?

新手都能看懂的设计模式——模板方法_第4张图片

通常这种情况下我们会打一些钩子(hook),例如这个例子中的needFilter,只要修改基类并且新增的子类覆盖该钩子方法的方法,而不需要修改原有的子类。

总结

1)模板方法模式是一种类的行为型模式,在它的结构图中只有类之间的继承关系,没有对象关联关系。

2)模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。

3)在模板方法模式中,我们需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来让子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意。模板方法模式体现了面向对象的诸多重要思想,是一种使用频率较高的模式。


你可能感兴趣的:(学习随笔)