博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板方法模式----设计模式系列
阅读量:6228 次
发布时间:2019-06-21

本文共 1563 字,大约阅读时间需要 5 分钟。

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。

         定义有些呆板,说说我的理解吧。父类定义实施的步骤,子类中实现具体的算法。当我们要完成在某一细节层次一直得一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,通常考虑用模板方法木事来处理。

代码很简单的不要不要的,还有注释。直接贴啦。

(1)定义抽象模板父类

/** * 抽象模板,定义并实现了一个模板方法。这个模板方法一般是个具体方法
* 它给出了一个顶级逻辑的骨架。
* 而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
* 顶级逻辑也有可能调用一些具体方法。 * @author 董永康 * */public abstract class AbstractClass { public abstract void add(); public abstract void sub(); public void TemplateMethod() { add(); sub(); System.out.println(this.getClass().getName()); }}
(2)具体实现子类

/** * 具体实现类,在这里实现父类定义的一个或者多个抽象方法 * @author 董永康 * */public class ConcreteClassA extends AbstractClass {	@Override	public void add() {		System.out.println("ConcreteClassA-->add()");	}	@Override	public void sub() {		System.out.println("ConcreteClassA-->sub()");	}}
/** * 具体实现类,在这里实现父类定义的一个或者多个抽象方法 *  * @author 董永康 * */public class ConcreteClassB extends AbstractClass {	@Override	public void add() {		System.out.println("ConcreteClassB-->add()");	}	@Override	public void sub() {		System.out.println("ConcreteClassB-->sub()");	}}
(3)测试类

public class Template {		public static void main(String[] args) {		AbstractClass  mAbstractClass = new ConcreteClassA();		mAbstractClass.TemplateMethod();				mAbstractClass = new ConcreteClassB();		mAbstractClass.TemplateMethod();	}}
(4)输出

ConcreteClassA-->add()ConcreteClassA-->sub()com.dyk.template.ConcreteClassAConcreteClassB-->add()ConcreteClassB-->sub()com.dyk.template.ConcreteClassB
总结:模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势。提供了一个很好的代码复用平台。通过模板方法模式把不可变的行为搬移到父类,帮助子类拜托重复不变行为的纠缠。

下载地址:

转载地址:http://epina.baihongyu.com/

你可能感兴趣的文章
遍历json对象---Java
查看>>
从头开始搭建一个Spring boot+RabbitMQ环境
查看>>
bash编程 将一个目录里所有文件存为一个array 并分割为三等分——利用bash array切片...
查看>>
自己动手开发IOC容器
查看>>
hdparm
查看>>
[LeetCode] Best Time to Buy and Sell Stock
查看>>
《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
查看>>
C++11学习
查看>>
【java】java工具类StringUtils,org.apache.commons.lang3.StringUtils
查看>>
WPF太阳、地球、月球运动轨迹模拟
查看>>
Getting Started with Scala
查看>>
curl != casperjs ? - Google Groups
查看>>
Oracle从字符串资源中得到想要的数据分析
查看>>
敏捷开发中的Code Review
查看>>
事务 commit
查看>>
{右键我的电脑无法打开计算机管理}解决方法
查看>>
如何获取和发送Http请求和相应
查看>>
【HeadFirst 设计模式学习笔记】4 工厂模式
查看>>
CentOS6.4 安装mysql cmake的参数说明
查看>>
创新型政府网站群建设
查看>>