文章首发:
行为型模式:模板方法
十一大行为型模式之一:模板方法。
引用>简介
<强>姓名强>:模板方法
<强>英文名强>:
模板方法模式<强>价值观强>:在我的掌控下,任由你发挥
<强>个人介绍强>:
定义一个算法的框架在一个操作中,子类推迟一些步骤。模板方法允许子类重新定义算法中的某些步骤不改变算法的结构。
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
(来自《设计模式之禅》)解释一下上面的介绍,意思是由父类来定义框架,让子类来具体实现。
你要的故事
刚过完春节,大家都买新鞋了么?今天要讲的故事和鞋子有关。一双鞋子从表面来看,由鞋底,鞋垫,鞋面,鞋带组成,同一系列的鞋子这几个部分都是一样的,用同样的材料做出来,不同系列的鞋子就大相径庭了。根据模板方法模式,组装一双鞋子的制造过程可以归并为固定的框架,至于用什么材料,那由每个系列的鞋子去具体实现。我们先看定义组装鞋子的框架代码。
<=坝镅詊ava代码类>/* * *定义鞋子制造的工序框架 */抽象类ShoeInstallTemplate { 公共抽象空白installSole (); 公共抽象空白installInsole (); 公共抽象空白installVamp (); 公共抽象空白installShoelace (); 公共空间installShot () { System.out.println(“组装一双鞋,步骤如下:”);//组装鞋底 installSole ();//组装鞋垫 installInsole ();//组装鞋面 installVamp ();//组装鞋带 installShoelace (); } }代码>定义了一个组装鞋子框架的抽象类ShoeInstallTemplate,里面有4个工序未具体实现,由鞋子制造商去实现,因为只有鞋子制造商才知道鞋子要用什么材料来做。
下面举2个比较出名的鞋子:阿迪达斯的提振系列和耐克的乔丹系列。下面分别实现这2个系列鞋子的制造代码。<=坝镅詊ava代码类>/* * *阿迪达斯提高鞋制造 */类AdidasBoostShoeInstall延伸ShoeInstallTemplate { @Override 公共空间installSole () { system . out。println(“组装白色提高鞋底”); } @Override 公共空间installInsole () { system . out。println(“组装黑色提高鞋垫”); } @Override 公共空间installVamp () { system . out。println(“组装黑色提高鞋面”); } @Override 公共空间installShoelace () { system . out。println(“组装黑色提高鞋带”); } }/* * *耐克乔丹鞋制造 */类NikeJordanShoeInstall延伸ShoeInstallTemplate { @Override 公共空间installSole () { system . out。println(“组装黑色乔丹鞋底”); } @Override 公共空间installInsole () { system . out。println(“组装黑色乔丹鞋垫”); } @Override 公共空间installVamp () { system . out。println(“组装红色乔丹鞋面”); } @Override 公共空间installShoelace () { system . out。println(“组装红色乔丹鞋带”); } }代码>实现了制造商制造鞋子的代码之后,我们通过代码测试怎么制造提高和乔丹鞋子。
<代码类="语言java ">公共类TemplateMethodTest { 公共静态void main (String [] args) { ShoeInstallTemplate adidasBoost=new AdidasBoostShoeInstall (); adidasBoost.installShot (); ShoeInstallTemplate nikeJordan=new NikeJordanShoeInstall (); nikeJordan.installShot (); } } 打印结果: 组装一双鞋,步骤如下: 组装白色提高鞋的底 组装黑色提高鞋垫 组装黑色提高鞋面 组装黑色提高鞋带 组装一双鞋,步骤如下: 组装黑色乔丹鞋底 组装黑色乔丹鞋垫 乔丹组装红色鞋面 代码组装红色乔丹鞋带> >之前模板方法模式就这么简单。是不是掌握了?
代码:
模板方法模式
总结
模板方法是一个比较实用的模式,为什么说实用呢?举个现实的例子,Java能有如今的发展,离不开各大开源框架,比如达博,有看过源码的朋友就知道,里面大量代码运用了模板方法设计模式,为什么达博可以支持很多种注册中心?其实本质就是用了模板方法设计模式,使得可以扩展多种注册中心。掌握好模板方法,对读源码有非常大的帮助,很多人包括我在内,在刚开始阅读源码的时候,有相当长的一段时间怀疑人生,怎么这些代码那么绕?调来调去的。当你了解了常用的设计模式之后,看源代码就可以直截了当的知道是用什么设计模式,为什么用这个设计模式?原来是为了什么什么…
行为型模式:模板方法