建造者模式简介
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在这样的设计模式中,有以下几个角色:
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();
}
}
}
测试结果:
建造者独立,易扩展。便于控制细节风险。 | |
---|---|