模板方法模式

上学期看过一些程杰老师的《大话设计模式》,看了不少说实话记不住,也不怎么理解,昨天Java补课的时候,李老师给我们讲了一下模板方法模式,例子举得很好,再加上以前了解一些,所以听得比较有感觉,今天就拿来和大家分享一下吧,没什么技术含量,当做一个笔记吧,希望对大家有一些帮助。李老师也告诉我们设计模式是一个比较抽象的东西,需要很多实践经验才能真正理解其中奥妙,但是本科生也可以了解了解,没什么害处。

 

先套用一下子《大话设计模式》里程杰老师引用DP里的模板设计模式的定义:定义一个操作中算法的骨架,而将这些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

 

下面我就来引用一下昨天李老师的例子吧(被我改编了不少)。

 

我们假设一个饮品店要制作各种果汁,我们知道制作果汁的过程都是相似的,比如先加水,再加水果,再加冰......只是具体配料不同而已,我们也明白这些步骤的顺序是不能改变的(我假设不能吧),如果这个店招了一个服务员,这个服务员做事马马虎虎,老是忘记制作果汁的步几个骤或者弄乱了制作顺序,导致经常制作失败,给小店带来损失,老板招不到别人就只好继续用他,为了减少损失,老板写了一个详细的制作步骤在一张纸上,其中只是步骤的名称,要求该服务员每次制作之前都要看一遍按上面的步骤来做,根据具体制作果汁的种类来实现具体的步骤。

故事就到此吧。

 

下面我们就把模板方法从这里边揪出来:

我们把老板给店员写的那个纸条抽象成一个超类,在上面声明一些子类必须实现的方法(抽象方法),而在超类中不需实现,再定义一个方法来安排各个操作的步骤顺序,然后在创建一些子类来继承父类,在这些子类中必须实现超类的方法(也就是店员必须按照老板的给的指示一步一步都实现),各个子类也不必再重新定义一个方法来安排整个制作过程,因为可以利用默认从超类继承的制作过程方法。

另外在主函数中创建子类的对象时可以直接调用其从超类中继承的制作方法。也就是利用多态来实现代码复用。这也是模板方法的一个小优点吧。把子类中重复的东西都搬到超类中去(比如这个例子中的制作饮料方法),把子类中必须自己实现而不能改的方法,也搬到父类中做抽象方法(比如这个例子中超类中的各个抽象方法),这种把可变和不可变的方法有机的分离,使程序结构十分清晰。

 

第一次写设计模式的东西,希望能对大家有帮助。

 

下面贴一段自己刚刚根据上边例子实现的一个程序(Java)。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值