您的位置:首页 > 其它

设计模式学习笔记(15)——“模板方法”模式

2015-05-20 23:10 531 查看
一、模式定义 所谓模板方法模式就是在一个方法中定义一个算法的骨架(主方法),而将一些步骤(组成主方法的N个方法)延迟到子类中。模板方法使得子类可以在不改变算法结构(主方法)的情况下,重新定义算法中的某些步骤。 其实所谓模板就是一个方法,这个方法将算法的实现定义成了一组步骤,其中任何步骤都是可以抽象的(也可以非抽象),交由子类来负责实现。这样就可以保证算法的结构保持不变,同时由子类提供部分实现。二、模式结构

从上面的结构可以看出,模板方法模式就两个角色: 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、有时候一个过程由一系列步骤构成,从高层次上看,这个过程是相同的,只是有些步骤的实现可能不同,这时候就应该考虑使用模板方法模式了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: