【建造者模式】
建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模型,它提供一种创建对象的最佳方式
Builder类会一步一步构造出最终的对象,该Builder类是独立于其他对象的
【介绍】
-
主要解决:在软件系统中,有时候面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂的对象各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相对稳定
-
何时使用:一些基本部件不会变,而其组合经常变化的时候
-
如何解决:将变与不变分离开
-
关键代码:建造者:创建和提供实例;导演:管理建造出来的实例的依赖关系
-
优点:建造者独立,易扩展;便于控制系细节风险
-
缺点:产品必须有共同点,范围有限制;如内部变化复杂,会有很多的建造类
-
使用场景:需要生成的对象具有复杂的内部结构;需要生成的对象内部属性本身相互依赖
-
注意事项:与工厂模式相比较,建造者模式更加关注于零件装配的顺序
【实现】
步骤一:producr产品类,有多个部件组成
class Product
{
IList<string> parts = new List<string>();
public void Add(string part)//添加产品部件
{
parts.Add(part);
}
public void Show()
{
Console.WriteLine("\n产品创建=================");
foreach (string part in parts )//列举所有的产品部件
{
Console.WriteLine(part);
}
}
}
步骤二:Bulider类,抽象创建者类,确定产品由两个部件组成,PartA和PartB组成,并声明一个产品建造后结果的方法GetResult
abstract class Builder
{
public abstract void BuildpartA();
public abstract void BuildpartB();
public abstract Product GetResult();
}
步骤三:ConcreteBuilder类,具体建造者类
class ConcreteBuilder1:Builder
{
private Product product = new Product();
public override void BuildpartA()
{
product.Add("部件A");//建造具体的两个部件A和B
}
public override void BuildpartB()
{
product.Add("部件B");//建造具体的两个部件A和B
}
public override Product GetResult()
{
return product;
}
}
class ConcreteBuilder2 : Builder
{
private Product product = new Product();
public override void BuildpartA()
{
product.Add("部件X");//建造具体的两个部件A和B
}
public override void BuildpartB()
{
product.Add("部件Y");//建造具体的两个部件A和B
}
public override Product GetResult()
{
return product;
}
}
步骤四:Director类,指挥者类
class Director
{
public void Construct(Builder builder)
{
builder.BuildpartA();
builder.BuildpartB();//用来指挥建造过程
}
}
步骤五:客户端代码
//客户不需要知道具体的建造过程
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();
director.Construct(b2);
Product p2 = b1.GetResult();
p2.Show();
Console.Read();
【总结】
创建者模式是在当创建负责对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式