黑马程序员:Java培训、Android培训、iOS培训、.Net培训
黑马程序员--模板方法模式
一、定义
在一个方法中定义一个算法的骨架(执行的步骤,方法的调用次序),而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
二、模板方法模式类图
1)AbstractClass定义一组抽象的原语操作(算法的各个步骤),并由其子类重新实现。同时,实现一个模板方法,用来定义一个算法的骨架。模板方法既可以调用原语操作,也可以调用在AbstractClass中定义的其他方法或其他对象中的操作。钩子函数提供缺省的行为,子类在必要时可以进行扩展。
2)ConcreteClass实现抽象类中的原语操作。
三、适用性
1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2、各个子类中公共的行为应该被提取出来,并集中到一个公共父类中以避免代码重复。
3、控制子类扩展。模板方法只在特定点调用钩子函数,这样就只允许在这些点进行扩展。
四、使用模板方法模式需要考虑的问题
1、访问控制
不需要重定义的原语操作可以定义为保护成员,这样保证这些原语操作只被模板方法调用。必须重定义的原语操作须定义为纯虚函数。而模板方法不需要重定义,声明为非虚函数。
2、尽量减少原语操作。
3、统一的命名约定。
写在模式之前:http://www.cnblogs.com/oo-lab/articles/4593399.html
策略模式:http://www.cnblogs.com/oo-lab/articles/4593407.html
迭代器模式:http://www.cnblogs.com/oo-lab/articles/4593416.html
观察者模式:http://www.cnblogs.com/oo-lab/articles/4593418.html
命令模式:http://www.cnblogs.com/oo-lab/articles/4593425.html
模板方法模式:http://www.cnblogs.com/oo-lab/articles/4593428.html
状态模式:http://www.cnblogs.com/oo-lab/articles/4593429.html
单件模式:http://www.cnblogs.com/oo-lab/articles/4593432.html
工厂方法模式:http://www.cnblogs.com/oo-lab/articles/4593435.html
抽象工厂模式:http://www.cnblogs.com/oo-lab/articles/4593440.html
生成器模式:http://www.cnblogs.com/oo-lab/articles/4593444.html