C# 程式設計經典300例 實例091 建造不同的果園 建造者模式
實例091要先看main函數的內容,對照圖8-7建造者模式結構圖,會比較容易懂。若是物件建造過程較複雜,可使用建造者模式。
實例描述
在北京與上海建造果園,每個果園水果品種都不同。範例利用果園建造者對具體的果園提供創建方法,再由果園建造者對具體的果園進行創建。
輸出「建造北京果園」、「北京果園種植北京蘋果和北京橘子」、「建造上海果園」與「上海果園種植上海蘋果和上海橘子」字串。
實現過程
main函數代碼如下:
//創建北京果園建造指導者
OrchardDirector bjOrchardDirector = new OrchardDirector(new BJOrchardBuilder());
Orchard bjOrchard = bjOrchardDirector.Construct();
bjOrchard.Plant();
//創建上海果園建造指導者
OrchardDirector shOrchardDirector = new OrchardDirector(new SHOrchardBuilder());
Orchard shOrchard = shOrchardDirector.Construct();
shOrchard.Plant();
//果園
public class Orchard
{
string name;
public string Apple { get; set;}
public string Orange { get; set;}
public Orchard(string name)
{
this.name = name;
Console.WriteLine(“建造{0}果園!”, name);
}
public void Plant()
{
Console.WriteLine(“{0}果園種植{1}和{2}!”, name, Apple, Orange);
}
}
//果園建造指導者
public class OrchardDirector
{
OrchardBuilder orchardBuilder;
public OrchardDirector( OrchardBuilder myClassBuilder)
{
this.orchardBuilder = myClassBuilder;
}
public Orchard Construct()
{
orchardBuilder.BuildApple();
orchardBuilder.BuildOrange();
return orchardBuilder.GetOrchard();
}
}
//果園抽象建造者
public abstract class OrchardBuilder
{
public abstract void BuildApple();
public abstract void BuildOrange();
public abstract Orchard GetOrchard();
}
//北京果園建造者
public class BJOrchardBuilder:OrchardBuilder
{
Orchard bjOrchard = new Orchard(“北京”);
public override void BuildApple()
{
bjOrchard.Apple = “北京蘋果”;
}
public override void BuildOrange()
{
bjOrchard.Orange = “北京橘子”;
}
public override Orchard GetOrchard()
{
return bjOrchard;
}
}
//上海果園建造者
public class SHOrchardBuilder:OrchardBuilder
{
Orchard shOrchard = new Orchard(“上海”);
public override void BuildApple()
{
shOrchard.Apple = “上海蘋果”;
}
public override void BuildOrange()
{
shOrchard.Orange = “上海橘子”;
}
public override Orchard GetOrchard()
{
return shOrchard;
}
}
代碼解析
通過OrchardDirector 實現了Orchard類別及創建的分離,降低了調用者對Orchard類創建的耦合性。
建造者模式主要用於結構比較複雜的對象創建,對於複雜對象可能存在多個部分需要創建,而且存在多種創建方法,通過建造者模式可以讓物件使用與創建過程分離。
留言
張貼留言