1、前言设计模式
前面咱们讲过了迭代器模式和适配器模式,对于这两个‘器’,咱们要有深入的理解,理解何以称得上‘器’,工具也,拿来让咱们使用的,人类和动物的最大区别是使用工具,虽然我对这个不是很赞成,可是工具的重要性是毫无争议的,善假于物才能走到更高的地方去。如今开始,咱们好好地看一看设计模式,其实无外乎接口、抽象类、具体类,经过链接(聚合、组合、继承和派生)从而实现多态来达到高内聚、低耦合的设计原则,这些原理中,咱们能够看到一些基本原则了,好比将实现交给子类,尽可能不要动之前已经封装好的模块,超类对子类的使用权限(里式代换法则),代码要具备可扩展性等等,经过这些看似复杂而在大型工程中必不可少的东西,咱们建造了一个个高楼大厦。而模板方法就是将实现具体的实现交给子类,而父类只是作一些全局的任务安排,子类和父类须要紧密的配合才能实现一个任务的功能,由于工做的紧密结合,咱们在写代码的时候必定要作好注释,这样才能使得程序具备强健的可读性。架构
2、模板方法模式工具
模板,就是设定一种结构或者架构,而后后续的全部工做都是在这个架子上填充相应的内容。好比老师要统计同窗们的兴趣爱好,实现会给同窗们一张纸,规定了姓名、学号、年龄、性别、兴趣爱好等模式,而后同窗们按照给定的内容进行填充,不一样的人会有不一样的填写结果,最后老师收回同窗们的结果,若是发现还想统计其余的信息,只用在模式上加入新的一个属性,这样就能够了,若是不这样作,咱们能够看到有的同窗只写了姓名,有的只写了兴趣爱好等等,这样在之后的维护之中就很是的麻烦,由于信息很是的混乱,因而可知模板的重要性。其实生活中到处能够看到,好比一个公司的收据,发票的格式,一卡通的格式,银行帐号的格式,厕所的设计,各类文件的格式,邮件的格式等等,这种模式、模型、格式、规定、设计原则落到具体化的时候就变成了模板,咱们当且仅当按照模板的方式进行填充了,咱们的信息才会被承认和理解。一样的咱们思考在面向对象设计(OOD)中,咱们的模板应该是在子类仍是父类呢,根据继承的特性,咱们知道子类具备父类的全部特征,而且能够有父类没有的方法,而反之不能,所以,父类就是最好的模板材料,那么咱们在父类上面设计一些属性或者模式,让子类去实现和完成,而且在父类上面给出一种统一的处理某类事物的方法,这种方法中将属性或者模式有机的组合和拼接起来,就成为模板方法。好比咱们在模板中定义了A,B,C三种方法,这三种方法就是规定,而后咱们在父类上在定义一个方法Model,Model使用了A,B,C方法来实现现实生活中的某一件事情,任何对于A,B,C的实现都须要通过Model进行处理才可以完成相应的事务,所以,咱们成这个Model方法为模板。以后咱们的任务须要必定的改变,只须要在Model上面进行操做就能同步到子类上面了,加入子类有100个,这是很是方便的。this
3、代码spa
package zyr.dp.template; public abstract class AbstractDisplay { public abstract void open(); public abstract void print(); public abstract void close(); public final void display(){ open(); print(); close(); } }
package zyr.dp.template; public class CharDisplay extends AbstractDisplay { String word; CharDisplay(String word){ this.word=word; } public void open() { System.out.print("<<"); } public void print() { System.out.print(word); } public void close() { System.out.println(">>"); } }
package zyr.dp.template; public class StringDisplay extends AbstractDisplay { String word; int width; StringDisplay(String word){ this.word=word; width=word.getBytes().length; } public void open() { printString(); } public void print() { for(int i=0;i<5;i++){ System.out.print("|"); System.out.print(word); System.out.println("|"); } } public void close() { printString(); } private void printString(){ System.out.print("#"); for(int i=0;i<width;i++){ System.out.print("*"); } System.out.println("#"); } }
package zyr.dp.template; public class Main { public static void main(String[] args) { AbstractDisplay p=new CharDisplay("zyr"); p.display(); System.out.println("----------------"); p=new StringDisplay("zyr"); p.display(); } }
4、总结.net
模板模式很是好理解,使用起来也很简单,可是在工程中咱们每每将模板与其它模块结合起来使用,所以咱们要认清模板模式的本质,将具备相同操做的多种事物抽象出相同的操做,而后将这些操做有机的整合起来变成模板类,另外也要注意在模板方法的定义final表示此方法不能被继承和重写,这无疑是重要的,规定和法则不能被其余人锁改变。在后面的工厂方法中,咱们能够看到模板的应用,以及迭代器的影子。设计
浅谈设计模式<最通俗易懂的讲解>code