Template模式java
Template模式顾名思义是提供了一种模板,也就是针对某种业务提供了模范框架。这个在spring中是属于核心模式的,由于其ApplicationContext抽象类就是模板模式的终极体现。算法
Template模式通常状况下是指针对某种业务算法(或者业务动做)造成的固定模式。并且它是基于继承的一种实现。由父类类完成模板方法,仅留出模板方法中的特别处理方法做为抽象方法,交由子类根据具体状况来实现。spring
对于具体使用,要引用一下《Expert》中的一句话“Publicsuperclass methods are usually final: the abstract methods deferredto subclasses are protected. ”正如这句话前面的一段所描述的,父类控制整个业务流,而将不能肯定一些具体实现延迟给子类实现。刚这句话是借用java的基本属性来强制这种实现方式。父类中定义的工做流方法应该用publicfinal关键字,而抽象方法应该用protectedabstract 关键字。设计模式
经过Template模式,还实现了子类对父类的反向依赖。这样就由原来上层类依赖具体实现的状况,变成了子类依赖父类的具体逻辑,对于业务的实现主体都是在父类中完成的。框架
Strategy模式spa
策略是指在某种情况下,应该出手的套路。这包含了两个方面,一是固定的策略模板,一是具体实现。Strategy模式正是这样来实现的,它提供了一个具备策略模板的接口,具体业务系统仅依赖这个接口,而这也是依赖反转的一个具体例子。为什么是依赖反转呢?由于业务具体依赖接口,而具体的策略实现也是依赖接口。那么若是按照咱们直观的作法,可能就是由业务系统直接依赖某个具体实现。设计
命令模式,模板模式和策略模式都是《设计模式》中的行为性模式。《敏捷》就是把Template和Strategy放在一块儿来描述的。指针
周末公司培训,好多东西要消化,反却是把blog放下了两天,内心很不痛快。blog
此次写的并很少,但从动手写这些东西,内心就不断有想法涌现。之前看过的书,真还须要多看几遍,是切切实实地留在本身的记忆力,融到本身的代码中。惋惜之前老是将那么多好资料束之高阁。继承
在写这些笔记的时候,也一直在考虑应该怎样去描述,画一个清晰的类图,太懒了,由于在《Design Patterns》中有不少好的类图,关系图。而如今本身写下来的是本身的理解。