建造者模式簡介
將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
在這樣的設計模式中,有以下幾個角色:
1 builder:爲創建一個產品對象的各個部件指定抽象接口。
2 ConcreteBuilder:實現Builder的接口以構造和裝配該產品的各個部件,定義並明確它所創建的表示,並 提供一個檢索產品的接口。
3 Director:構造一個使用Builder接口的對象。
4 Product:表示被構造的複雜對象。ConcreteBuilder創建該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的接口。
何時使用:
- 需要生成的對象具有複雜的內部結構。
- 需要生成的對象內部屬性本身相互依賴。
- 一些基本部件不會變,而其組合經常變化的時候。
Hints: 與工廠模式的區別是:建造者模式更加關注與零件裝配的順序。
C# 建築者模式Demo
AbstractPerson.cs
namespace ConstructionPattern
{
public abstract class AbstractPerson
{
public abstract void CreateBody();
public abstract void CreateHand();
public abstract void CreateHead();
public abstract void CreateLeg();
}
}
FatPerson.cs
using System;
namespace ConstructionPattern
{
public class FatPerson : AbstractPerson
{
public override void CreateBody()
{
Console.WriteLine("生成胖人的身體");
}
public override void CreateHand()
{
Console.WriteLine("生成胖人的手");
}
public override void CreateHead()
{
Console.WriteLine("生成胖人的頭部");
}
public override void CreateLeg()
{
Console.WriteLine("生成胖人的腿");
}
}
}
ThinPerson.cs
using System;
namespace ConstructionPattern
{
public class ThinPerson : AbstractPerson
{
public override void CreateBody()
{
Console.WriteLine("生成瘦人的身體");
}
public override void CreateHand()
{
Console.WriteLine("生成瘦人的手");
}
public override void CreateHead()
{
Console.WriteLine("生成瘦人的頭部");
}
public override void CreateLeg()
{
Console.WriteLine("生成瘦人的腿");
}
}
}
BuilderDirector.cs
namespace ConstructionPattern
{
public class BuilderDirector
{
AbstractPerson person = null;
public BuilderDirector(AbstractPerson person)
{
this.person = person;
}
public void CreatePerson()
{
this.person.CreateBody();
this.person.CreateHand();
this.person.CreateHead();
this.person.CreateLeg();
}
}
}
Program.cs
namespace ConstructionPattern
{
class Program
{
static void Main(string[] args)
{
BuilderDirector builderDirector = new BuilderDirector( new FatPerson() );
builderDirector.CreatePerson();
builderDirector = new BuilderDirector(new ThinPerson());
builderDirector.CreatePerson();
}
}
}
測試結果:
建造者獨立,易擴展。便於控制細節風險。 | |
---|---|
更多: