设计模式 (十四)模板方法模式(Template)
来源:互联网 发布:办公室软件excel教程 编辑:程序博客网 时间:2024/05/17 22:51
模板方法模式(Template)是行为模式之一,其就是简单定义一个算法执行骨架,而将其具体的算法延迟到子类中实现,从而使出现过多的类的时候不用再改变算法和结构直接添加一个实现子类就可以了。
一般在具体统一的操作步骤和业务功能,但是具有不同的细节处理,这样用模板方法模式减少了代码的复用
下面简单的看看模板方法模式的原理图:
实例对象对于抽象类的继承,展开了具体的细节功能的处理,下面把模式应用到具体的实例:
简单的对于我们每天吃饭的情况(我旁边的各种情况),用一个普通的人作为吃饭的抽象类,然后定义吃早饭午饭晚饭都吃什么,通过不同的人对吃饭的要求也不一样对了一个小例子:
XHW分别是三种人,然后都有固定的一日三餐,但是吃的方式是不一样的:
- package com.designpattern.template;
- public abstract class Person {
- public void eat() {
- breakfast();
- lunch();
- dinner();
- }
- public abstract void breakfast();
- public abstract void lunch();
- public abstract void dinner();
- }
这里定义抽象类就是用来继承的,同时里面的eat是非抽象方法,这样子类可以不继承,直接实现父类指针指向子类,同时调用方法,但是对于早上中午晚上的方法,只必须要子类去继承的,所以就抽象了一下:
- package com.designpattern.template;
- public class X extends Person {
- @Override
- public void breakfast() {
- System.out.println("早晨先吃两个麦面包片再喝一袋奶吃一个鸡蛋");
- }
- @Override
- public void dinner() {
- System.out.println("中午去食堂三楼吃牛肉罩饼");
- }
- @Override
- public void lunch() {
- System.out.println("晚上去食堂一楼吃饺子在来一碗盖饭");
- }
- }
- <pre name="code" class="java">package com.designpattern.template;
- public class W extends Person {
- @Override
- public void breakfast() {
- System.out.println("早晨没有时间吃早饭,于是就不吃了");
- }
- @Override
- public void dinner() {
- System.out.println("中午去食堂二楼吃两个馒头一个菜一碗粥");
- }
- @Override
- public void lunch() {
- System.out.println("晚上去食堂三楼吃一个饼一盘菜一碗粥");
- }
- }
- package com.designpattern.template;
- public class W extends Person {
- @Override
- public void breakfast() {
- System.out.println("早晨没有时间吃早饭,于是就不吃了");
- }
- @Override
- public void dinner() {
- System.out.println("中午去食堂二楼吃两个馒头一个菜一碗粥");
- }
- @Override
- public void lunch() {
- System.out.println("晚上去食堂三楼吃一个饼一盘菜一碗粥");
- }
- }
然后在Client端调用:
- package com.designpattern.template;
- public class Client {
- public static void main(String[] args) {
- System.out.println("H");
- Person h = new H();
- h.eat();
- System.out.println();
- System.out.println("W");
- Person w = new W();
- w.eat();
- System.out.println();
- System.out.println("X");
- Person x = new X();
- x.eat();
- System.out.println();
- }
- }
输入内容如下
- H
- 早晨一般不吃饭,减肥
- 晚上去尚饮吃云吞什锦
- 中午在外面买一点煎饼什么的吃点
- W
- 早晨没有时间吃早饭,于是就不吃了
- 晚上去食堂三楼吃一个饼一盘菜一碗粥
- 中午去食堂二楼吃两个馒头一个菜一碗粥
- X
- 早晨先吃两个麦面包片再喝一袋奶吃一个鸡蛋
- 晚上去食堂一楼吃饺子在来一碗盖饭
- 中午去食堂三楼吃牛肉罩饼
这样就简单的实现了一个模板模式;
使用模板方法模式,在定义算法的骨架的同时,可以很灵活地实现具体的算法,满足用户灵活多变的需求。
虽然使用模板方法模式可以很自由滴实现具体的算法,但是如果算法的骨架有改变的话,则需要重新修改抽象类。
- 设计模式 (十四)模板方法模式(Template)
- 设计模式 (十四)模板方法模式(Template)
- 【设计模式】-模板方法模式(Template)
- 设计模式:模板方法模式(Template)
- 《设计模式精解》学习笔记(十四)------Template Method(模板方法)模式
- 浅谈Java设计模式(十四)模板方法模式(Template Method)
- Java面向对象设计模式(十四)——模板方法模式(Template Method)
- Java开发中的23种设计模式之十四:模板方法模式(Template Method)
- 设计模式学习笔记(二十四)——Template Method模板方法
- 模板方法(Template)设计模式
- 【设计模式学习笔记二十四】【行为模式】【模板方法(Template Method)】
- 设计模式之模板方法模式Template
- 设计模式----模板方法模式(Template Method)
- [设计模式]模板方法模式(Template Method)
- 设计模式(12) - Template模板方法模式
- 设计模式--模板方法模式Template
- [C++设计模式]template 模板方法模式
- 设计模式:模板方法模式-template method
- RVMDK使用详解
- 09 gradient
- 浅析oracle嵌套表
- 设计模式 (十三)享元模式(Flyweight)
- PAL制式和NTSC制式的定义及区别
- 设计模式 (十四)模板方法模式(Template)
- php求两个日期之间每个月的开始和结束时间
- Eclipse快捷键大全
- JPCSP源码解读16:HLE与模块装载过程
- 过滤
- 设计模式 (十五)观察者模式(Observer)
- Cocos2d-x win7 + vs2010 配置图文详解
- 带 limit 的 Bulk Collect 的一个简单例子
- PL/SQL表---table()函数用法