`

模板方法模式(未总结透)

 
阅读更多
 

 

 

1 初识模板方法模式:

 

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

 

结构:

 

 

参考实现:

 

抽象类: 定义算法/操作骨架
public abstract class AbstractClass {
	/**
	 * 原语操作1,所谓原语操作就是抽象的操作,必须要由子类提供实现
	 */
	public abstract void doPrimitiveOperation1();
	/**
	 * 原语操作2
	 */
	public abstract void doPrimitiveOperation2();
	/**
	 * 模板方法,定义算法骨架
	 */
	public final void templateMethod() {
		doPrimitiveOperation1();
		doPrimitiveOperation2();
	}
}

具体实现类: 实现 算法/操作骨架
public class ConcreteClass extends AbstractClass {
	public void doPrimitiveOperation1() { 
		//具体的实现
	}
	public void doPrimitiveOperation2() { 
		//具体的实现
	}
}

 

 

2 体会模板方法模式:

 

 场景问题: 系统登录,  普通用户登录前台, 工作人员登录 各写一套登录验证逻辑;

可以进行抽像:将登录功能公共方法抽象成一个抽象类, 不同人员的登录在继承这个抽象类后,在具体实现子类中写自己的业务逻辑;

 

 

3 理解模板方法模式:

 

认识模板方法模式: 此模式特点在于 固定算法骨架,在子类中让具体算法实现和扩展;

                                 多应用于设计框架级功能,框架固定好算法步骤,在合适的点让开发人员进行扩展;

                                 eg: javaee中的dao层接口 和 daoImpl类

                                同时还能控制子类的扩展,因为父类定义中用于扩展的点都用abstract,如果不想让子类扩展可以直接定义成final; 而这些可以被子类覆盖以扩展的方法 常称为“钩子”;

 

 

 

 

抽象类和接口之间关系:

接口是一个特殊的抽象类,即所有方法都是抽象的,不会再有任何正常已实现的方法

抽象类可以没有抽象方法,仅仅在类头顶上增加 abastract即可;里面可以有正常的方法

 

那么抽象类中,将功能不变的那些方法抽象出来进行公共实现,

把变化部分分离出来,用接口封装隔离,或用抽象类约束子类行为;

 

 

 

 

java回调与模板方法模式:

java通过回调在接口中定义的方法,调用到具体实现类的方法,本质就是利用java动态绑定技术,在回调这种技术中,实现类通常写成匿名内部类方式;

java回调下提供的接口,那么具体实现类中的方法就必须要实现所有的方法,

而模板方法模式中使用的是抽象类,那么具体实现子类中可以有所选择实现父类的方法,

java回调下提供的接口限制较死;

 

java回调典型应用: 

 排序---> public static <T> void sort(List<T> list,  Comparator<? super T> c)

这个算法步骤是固定的,即使算法骨架是固定的,而其中比较数据大小时,需要外部来提供,这个外部就是

comparator接口的实例,算法内部会通过接口回调来调用传入实例的方法;

 

 

 

实现通用增删改查: eg  dao层接口代码

 

 

优缺点:

1 实现代码复用

2 算法骨架不容易升级

 

 

 

4 思考模板方法模式:

本质:固定算法骨架

何时使用:

a) 固定定义算法的骨架,并把可变的行为交给子类来实现

b) 子类中拥有的公共行为应该抽取出来,集中在公共类中,避免代码重复

c) 需要控制子类扩展

 

 

 

5 模板方法模式脑图:

 

暂无  没理解透...

 

 

 

  • 大小: 107.9 KB
分享到:
评论

相关推荐

    设计模式可复用面向对象软件的基础.zip

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式--C++

    5.10 TEMPLATE METHOD(模板方法)—类行为型模式 214 5.11 VISITOR(访问者)—对象行为型模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式(.PDF)

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式 GOF 23

    在系统开发阶段强调这种机制的优势在于,它能使所生成的系统体系结构更加精巧、简洁和易于理解,其程度远远超过了未使用模式的体系结构。 模式在构造复杂系统时的重要性早已在其他领域中被认可。特别地,...

    GOLF设计模式(C++语言版)

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被...

    《国外写的,翻译版本》设计模式

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    《设计模式》中文版(23个设计模式的介绍与运用)

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides23种设计模式

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式文档

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式:可复用面向对象软件的基础--详细书签版

    在系统开发阶段强调这种机制的优势在于,它能使所生成的系统体系结构更加精巧、简洁和易于理解,其程度远远超过了未使用模式的体系结构。  模式在构造复杂系统时的重要性早已在其他领域中被认可。特别地,...

    设计模式part1

    行为模式 147 5.1 CHAIN OF RESPONSIBIL ITY(职责链) —对象行为...模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228...

    设计模式part2

    行为模式 147 5.1 CHAIN OF RESPONSIBIL ITY(职责链) —对象行为...模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228...

    设计模式 design pattern

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    JAVA经典设计模式大全

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被...

    设计模式___

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式可复用面向对象软件的基础.

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    设计模式(Design.Patterns.CHN)

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    软件设计师必读的书-设计模式

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式:可复用面向对象软件的基础

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

Global site tag (gtag.js) - Google Analytics