模板方法:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中.模板方法使得子類可以不改變一個算法的結構即可衝定義改算法的某些特定步驟.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圖大同小異。掌握了設計模式的原理,管它是不是用在算法骨架封裝,不照常使用麼。。。