模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可冲定义改算法的某些特定步骤.Servlet是模板方法的一个典型应用。
/**
* 抽象类代码
*/
public abstract class AbstractClass {
public static final String METHOD_1 = "m1";
public static final String METHOD_2 = "m2";
/**
*templateMethod方法规定了实现该方法的骨架
*
*/
public final void templateMethod(String methodName) {
if (METHOD_1.equals(methodName)) {
doOperation1(methodName);
}
if (METHOD_2.equals(methodName)) {
doOperation2(methodName);
}
}
protected abstract void doOperation1(String methodName);
protected abstract void doOperation2(String methodName);
}
/**
*子类ConcreteClass继承了抽象类AbstractClass
*重写父类方法,实现具体方法
*/
public class ConcreteClass extends AbstractClass {
@Override
protected void doOperation1(String methodName) {
System.out.println("ConcreteClass-->>doOperation1()" + methodName);
//.........
}
@Override
protected void doOperation2(String methodName) {
System.out.println("ConcreteClass-->>doOperation2()" + methodName);
//.........
}
}
外观模式:为子系统中德一组借口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
/**
*子系统类的各自方法的实现
*/
Pulbic class SubSystemOne{
public void MethodOne()
{
System.out.println("子系统方法一");
}
}
Pulbic class SubSystemTwo{
public void MethodTwo()
{
System.out.println("子系统方法二");
}
}
/**
*外观类,封装业务
*/
Public class Façade{
SubSystemOne one;
SubSystemTwo two;
/**
*Facade的构造方法
*/
public Façade(){
one=new SubSystemOne();
two=new SubSystemTwo();
}
/**
*方法MethodA()定义了一个逻辑过程
*/
public void MethodA()
{
one.MethodOne();
two.MethodTwo();
}
/**
*方法MethodB()定义了另一个逻辑过程
*/
public voi
public void MethodB()
{
two.MethodTwo();
one.MethodOne();
}
}
模板方法与外观模式的相同点:两个模式从本质上看都是在一个类中封装了一定的业务逻辑,外界不能更改。这也是模板最初的定义。
模板方法与外观模式的不同点:模板方法的耦合性比外观模式的耦合性强。见模式的UML图关系。
个人之见:每一个设计模式,它们都有自己的应用领域,所以也就赋予了不同名称。但有些设计模式的UML图大同小异。掌握了设计模式的原理,管它是不是用在算法骨架封装,不照常使用么。。。