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

 

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 模板方法模式脑图:

暂无  没理解透...

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2148042