一、說明:我覺得模板模式真的沒有什麼東西,似乎只是簡單的利用了繼承,而且和建造者模式差不多。
二、模板模式定義:定義乙個操作中的演算法的框架,而將一些步驟延遲到子類中,是的子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
例子:比如製造乙個產品x,需要先製作零件a,然後零件b,然後零件c,這樣就設計乙個abstractproductx的抽象類,然後定定義零件a、b、c的製造方法,然後定義乙個createproduct方法將三個零件做出來。
class abstract abstractproductx
}
將製造零件abc的具體方法延遲到子類中去實現,這樣如果未來科技發展了以後導致a零件的製造方法改變了,那麼只需要改變一下a()函式就可以了。而不會影響整體的框架。
建造者模式定義:將乙個複雜物件的構建和它的表示分離,使得同樣的構建過程可以建立不同的表示。(定義沒看懂啊)
我個人的理解就是在模板模式的基礎上使得框架方法中的執行順序可以根據需要而改變。(也就是上面例子中的createproduct
函式中的幾個函式執行順序可以任意改變)。
例子:抽象基礎類
public
abstract
class abstractproductx else
if (order[i] == 1) else
if (order[i] == 2) else
if (order[i] == 3) }}
}
具體實現類:product1和product2
public
class
product1
extends
abstractproductx
@override
protected
void
createb()
@override
protected
void
createc()
@override
protected
void
created()
}
public
class
product2
extends
abstractproductx
@override
protected
void
createb()
@override
protected
void
createc()
@override
protected
void
created()
}
既然叫建造者類當然就有建造者啦
public
class product1builder
}
public
class product2builder
}
還需要乙個指揮者(不知道用了這個指揮者有什麼好處?也許,如果原本設定的建造順序發生變化,那麼只需要在指揮者中去修改就可以了,而不需要到相應的建造者中去修改)
public
class director );
}public product2 getproduct2() );
}}
最後寫一段**測試一下:
director director = new director();
director.getproduct1();
director.getproduct2();
執行結果為:
製造product1
1_a
1_b
1_c
1_d
製造product2
2_c
2_d
2_b
2_a
設計模式之建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...
設計模式之建造者模式
建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...
設計模式之建造者模式
在做服務介面的時候,往往在業務處理之前需要做業務校驗,格式校驗等業務前處理。這些介面有個相同的特徵,就是必須經過這些處理步驟之後才能做核心的業務處理,拓展的服務介面也必須經過這些處理。基於這個特徵,我們就來分析一下設計模式中,建造者模式。我們先建乙個基礎的服務類 public abstract cl...