一模式定义
模板方法模式:定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中。模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
二模式举例
1模式分析
我们借用每日生活行为来说明这一模式。
2模板方法模式静态类图
3代码示例
3.1建立算法骨架一AbstractPeople
- package com.demo.template;
- /**
- * 抽象工人
- *
- * @author
- *
- */
- public abstract class AbstractPeople {
- /**
- * 起床方法
- */
- public void getUp() {
- System.out.println("起床...");
- }
- /**
- * 抽象吃早餐方法
- */
- protected abstract void haveBreakfast();
- /**
- * 抽象乘坐交通工具方法
- */
- protected abstract void transport();
- /**
- * 工作方法
- */
- public void doWork() {
- System.out.println("工作...");
- }
- /**
- * 模板方法(每天的行为)
- */
- public final void dayLift() {
- System.out.println("====================");
- // 起床
- getUp();
- // 早餐
- haveBreakfast();
- // 交通工具
- transport();
- // 工作
- doWork();
- System.out.println("====================");
- }
- }
3.2具体工人A一PeopleA
- package com.demo.template;
- /**
- * 工人A
- *
- * @author
- *
- */
- public class PeopleA extends AbstractPeople {
- /**
- * 具体吃早餐方法
- */
- @Override
- protected void haveBreakfast() {
- System.out.println("A早餐吃三明治,喝牛奶...");
- }
- /**
- * 具体乘坐交通工具方法
- */
- @Override
- protected void transport() {
- System.out.println("A开私家车上班...");
- }
- }
3.3具体工人B一PeopleB
- package com.demo.template;
- /**
- * 工人B
- *
- * @author
- *
- */
- public class PeopleB extends AbstractPeople {
- /**
- * 具体吃早餐方法
- */
- @Override
- protected void haveBreakfast() {
- System.out.println("B早餐喝粥,吃小菜...");
- }
- /**
- * 具体乘坐交通工具方法
- */
- @Override
- protected void transport() {
- System.out.println("B坐公共汽车上班...");
- }
- }
3.4具体工人C一PeopleC
- package com.demo.template;
- /**
- * 工人C
- *
- * @author
- *
- */
- public class PeopleC extends AbstractPeople {
- /**
- * 具体吃早餐方法
- */
- @Override
- protected void haveBreakfast() {
- System.out.println("C早餐吃煎饼,喝豆浆...");
- }
- /**
- * 具体乘坐交通工具方法
- */
- @Override
- protected void transport() {
- System.out.println("C坐地铁上班...");
- }
- }
3.5客户端测试一Client
- package com.demo;
- import com.demo.template.AbstractPeople;
- import com.demo.template.PeopleA;
- import com.demo.template.PeopleB;
- import com.demo.template.PeopleC;
- /**
- * 主应用程序
- *
- * @author
- *
- */
- public class Client {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 创建A、B、C三个工人
- AbstractPeople peopleA = new PeopleA();
- AbstractPeople peopleB = new PeopleB();
- AbstractPeople peopleC = new PeopleC();
- // 展示三个工人每天的行为
- peopleA.dayLift();
- peopleB.dayLift();
- peopleC.dayLift();
- }
- }
4运行结果
====================
起床...
A早餐吃三明治,喝牛奶...
A开私家车上班...
工作...
====================
====================
起床...
B早餐喝粥,吃小菜...
B坐公共汽车上班...
工作...
====================
====================
起床...
C早餐吃煎饼,喝豆浆...
C坐地铁上班...
工作...
====================
三该模式设计原则
1"开-闭"原则
2好莱坞原则
四使用场合
1一次性实现一个算法的不变部分,井将可变的行为留给子类实现。
2各子类中具有公共行为的时候,应被提取出来并集中到一个公共父类以避免代码重复。
3当需要控制子类扩展的时候。模板方法在特定点调用钩子操作,这样只允许在某些点进行扩展。
五模板方法静态类图
相关推荐
java的23种常用设计模式:模板方法模式
适合20分钟左右讲解的模板方法模式。 自己上课用的。
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
设计模式-模板方法模式(讲解及其实现代码)
设计模式C++学习之模板方法模式(Template Method)
设计模式模板方法模式PPT学习教案.pptx
模板方法模式的示例代码和文档,学习模板方法模式的参考资料。
模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。 在模板方法模式中,我们...
策略模式结合模板方法模式
iOS模板方法模式使用心得demo
模板方法模式例子代码
处理层的设计采用了设计模式中的策略模式、模板方法模式和工厂模式。 Server端和Client端的实现也采用了分层的设计方式,包含自定义的模型层、视图层和控制层。 说明:程序采用配置文件的方式进行初始化,运行时时请...
设计模式--模板方法模式java例子
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
将《Head First 设计模式》(中文版)按章节进行了分割,每章一个文件,方便大家下载。