设计模式学习笔记(15)——“模板方法”模式
2015-05-20 23:10
531 查看
一、模式定义 所谓模板方法模式就是在一个方法中定义一个算法的骨架(主方法),而将一些步骤(组成主方法的N个方法)延迟到子类中。模板方法使得子类可以在不改变算法结构(主方法)的情况下,重新定义算法中的某些步骤。 其实所谓模板就是一个方法,这个方法将算法的实现定义成了一组步骤,其中任何步骤都是可以抽象的(也可以非抽象),交由子类来负责实现。这样就可以保证算法的结构保持不变,同时由子类提供部分实现。二、模式结构
从上面的结构可以看出,模板方法模式就两个角色: AbstractClass: 抽象类 ConcreteClass: 具体子类 其中抽象类提供一组算法和部分逻辑的实现,具体子类实现剩余逻辑。三、模式实现AbstractClass类:
具体类ConcreteClassA类:
具体类ConcreteClassB类:
客户端代码:
运行结果:
ConcreteClassA--concreteMethodA
父类中的方法
ConcreteClassA--concreteMethodB
ConcreteClassB--concreteMethodA
父类中的方法
ConcreteClassB--concreteMethodB
[b]四、使用场景[/b] 1、 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 2、 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。 3、控制子类的扩展。 4、有时候一个过程由一系列步骤构成,从高层次上看,这个过程是相同的,只是有些步骤的实现可能不同,这时候就应该考虑使用模板方法模式了。
从上面的结构可以看出,模板方法模式就两个角色: AbstractClass: 抽象类 ConcreteClass: 具体子类 其中抽象类提供一组算法和部分逻辑的实现,具体子类实现剩余逻辑。三、模式实现AbstractClass类:
public abstract class AbstractClass { /** * 这个方法主要是抽象出所有子类中都一样的过程,具体的不同则交由子类实现 */ public final void sameMethod() { concreteMethodA(); System.out.println("父类中的方法"); concreteMethodB(); } public abstract void concreteMethodA(); public abstract void concreteMethodB(); }
具体类ConcreteClassA类:
public class ConcreteClassA extends AbstractClass { @Override public void concreteMethodA() { System.out.println("ConcreteClassA--concreteMethodA"); } @Override public void concreteMethodB() { System.out.println("ConcreteClassA--concreteMethodB"); } }
具体类ConcreteClassB类:
public class ConcreteClassB extends AbstractClass { @Override public void concreteMethodA() { System.out.println("ConcreteClassB--concreteMethodA"); } @Override public void concreteMethodB() { System.out.println("ConcreteClassB--concreteMethodB"); } }
客户端代码:
public class Client { public static void main(String[] args) { AbstractClass mAbstractClass = null; mAbstractClass = new ConcreteClassA(); mAbstractClass.sameMethod(); mAbstractClass = new ConcreteClassB(); mAbstractClass.sameMethod(); } }
运行结果:
ConcreteClassA--concreteMethodA
父类中的方法
ConcreteClassA--concreteMethodB
ConcreteClassB--concreteMethodA
父类中的方法
ConcreteClassB--concreteMethodB
[b]四、使用场景[/b] 1、 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 2、 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。 3、控制子类的扩展。 4、有时候一个过程由一系列步骤构成,从高层次上看,这个过程是相同的,只是有些步骤的实现可能不同,这时候就应该考虑使用模板方法模式了。
相关文章推荐
- java学习笔记-设计模式15(模板方法模式)
- 【学习笔记javascript设计模式与开发实践(模板方法模式)----11】
- 【设计模式学习笔记二十四】【行为模式】【模板方法(Template Method)】
- 设计模式学习笔记---模板方法模式template method pattern(Java版)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- Java学习笔记之抽象(abstract)与模板方法设计模式
- 设计模式学习笔记十三:模板方法模式
- 设计模式学习笔记十三:模板方法模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式学习笔记-模板方法模式
- 设计模式学习笔记--模板方法(Template Method)模式
- 设计模式学习笔记(三):模板方法模式【Template Method】(一) 问题提出
- 设计模式学习笔记(三):模板方法模式【Template Method】(二) 问题解决
- 设计模式学习笔记(三):模板方法模式【Template Method】(三) 问题引申
- 设计模式学习笔记——模板方法模式
- 设计模式学习笔记之模板方法模式
- [学习笔记]Java模板方法和单例设计模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式学习笔记——模板方法模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)