设计模式之模板方法模式
来源:互联网 发布:mac手绘板软件 编辑:程序博客网 时间:2024/05/21 17:19
设计模式之模板方法模式
模板方法模式:
将子类中重复出现的相同逻辑代码提取出来作为公共部分(一般将其提取放在一个具体的方法中),然后将其中的逻辑组成步骤,推迟至子类中实现(通常将逻辑组成步骤定义为抽象方法)。
模式中的角色:
1)抽象类(AbstractClass):定义了模板方法,此方法中包含了关于功能实现的主要逻辑框架(但逻辑仍不完整,缺少关键的步骤)。
2)实现类(ConcreteClass):实现了抽象类中的抽象方法,填补逻辑框架中的关键步骤。
代码大致介绍
1)AbstractTemplateMethod.class 定义抽象类,包含公共模板方法;
2)ImplTemplateMethod_01.class 定义实现类之一
3)ImplTemplateMethod_02.class 定义实现类之二
4)TemplateMethodTest 测试类
下面上代码:
package designpattern.templatemethod;/** * @function 抽象模板方法类,通常是将子类中<b style="color:red;">重复</b>出现逻辑代码提取出来 * 作为<b style="color:red;">公共部分</b>(一般将其放在一个具体的方法中),然后其中的逻辑组成步骤, * 推迟至子类中实现(通常将逻辑组成步骤定义为抽象方法)。 * @author Mr.leaf * @time 2017-3-1 17:40:54 * */public abstract class AbstractTemplateMethod { /** * @function 模板方法,给出了逻辑骨架,而逻辑的组成是一系列的抽象操作,均被推迟至子类中实现 * @describe 若用户abstMethod1()大于等于10,则打印abstMethod2(),否则打印abstMethod3() * */ public void templateMethod(){ if(abstMethod1() >= 10){ System.out.println(abstMethod2()); }else{ System.out.println(abstMethod3()); } } /** * @function 抽象方法一,推迟至子类实现,返回一个数字 * */ public abstract int abstMethod1(); /** * @function 抽象方法二,推迟至子类实现,返回一个字符串 * */ public abstract String abstMethod2(); /** * @function 抽象方法三,推迟至子类实现,返回一个字符串 * */ public abstract String abstMethod3();}
package designpattern.templatemethod;public class ImplTemplateMethod_01 extends AbstractTemplateMethod { private int num = 0; private String s1 = ""; private String s2 = ""; public ImplTemplateMethod_01() { super(); } public ImplTemplateMethod_01(int num, String s1, String s2) { super(); this.num = num; this.s1 = s1; this.s2 = s2; } @Override public int abstMethod1() { // TODO Auto-generated method stub return this.num; } @Override public String abstMethod2() { // TODO Auto-generated method stub return this.s1; } @Override public String abstMethod3() { // TODO Auto-generated method stub return this.s2; } }
package designpattern.templatemethod;public class ImplTemplateMethod_02 extends AbstractTemplateMethod { private int num = 0; private String s1 = ""; private String s2 = ""; public ImplTemplateMethod_02() { super(); } public ImplTemplateMethod_02(int num, String s1, String s2) { super(); this.num = num; this.s1 = s1; this.s2 = s2; } @Override public int abstMethod1() { // TODO Auto-generated method stub return this.num; } @Override public String abstMethod2() { // TODO Auto-generated method stub return this.s1; } @Override public String abstMethod3() { // TODO Auto-generated method stub return this.s2; }}
package designpattern.templatemethod;import org.junit.Test;public class TemplateMethodTest { @Test public void test() { //声明并实例化,将子类的声明改为父类,利用多态性,提高代码的复用性 AbstractTemplateMethod temp1 = new ImplTemplateMethod_01(15, "No.1:大于等于10", "No.1:小于10"); AbstractTemplateMethod temp2 = new ImplTemplateMethod_01(9, "No.2:大于等于10", "No.2:小于10"); //调用实现方法 temp1.templateMethod(); System.out.println("*********************"); temp2.templateMethod(); }}
代码大致就是这样,很简单,但设计模式的学习绝不仅仅是在代码,而是对设计模式的思考和理解。生活中也有用到这种设计模式的栗子,例如学校即将开学,学校会给各种教职人员安排不同的准备工作来迎接开学,这个时候想象一下,如果单独安排肯定会造成很多重复,所以我们可以先将公共的模板提炼出来,让不同的人员根据需要去使用。(好像学校开请假条也是这种设计模式,有请假条的模板,不同的学生根据不同需要去填写,哈哈^_^)
0 0
- 设计模式之模板方法模式模板方法模式
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- Java设计模式之模板方法模式
- Android Studio调试功能使用总结
- 剑指Offer:数值的整数次方
- js字符串常用判断方法
- libstdc
- C# 委托和事件 练习
- 设计模式之模板方法模式
- wx.navigateTo/wx.redirectTo 无效
- websocket(该文章是转载)
- java 校验一个字符串是否是手机号码
- IAR更改工程名方法图解
- mysql 5.5 主从同步数据到 msyql5.6数据库,报错为Slave is not configured or failed to initialize properly. You must
- 设计模式中简单工厂模式的应用----java
- Hwadee实训--day03
- 用静态Qt库编译DLL的方法