设计模式之建造者模式(Builder)

本文深入介绍了建造者模式的概念及其在创建复杂对象时的应用。通过具体的代码示例展示了如何利用建造者模式来创建不同类型的复杂对象,并解释了其背后的原理。

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时使用的模式。

Builder:为创建一个Product对象的各个部件指定的抽象接口
ConcreteBuilder:具体建造者,实现Builder接口,构造和装配各个部件
Product:具体的产品角色
Director:指挥者,构建一个使用Bulider接口的对象

使用条件:
1.需要生成的产品具有复杂的内部结构
2.需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
3.在对象创建过程中使用到系统中的一些其他对象,这些对象在产品的创建过程中不易得到。

Builder1.cs

代码
using System;
using System.Collections.Generic;
using System.Text;

//建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以
//创建不同的表示。在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配
//方式时使用的模式

//Builder:为创建一个Product对象的各个部件指定的抽象接口
//ConcreteBuilder:具体建造者,实现Builder接口,构造和装配各个部件
//Product:具体的产品角色
//Director:指挥者,构建一个使用Bulider接口的对象

//使用条件:
//1.需要生成的产品具有复杂的内部结构
//2.需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
//3.在对象创建过程中使用到系统中的一些其他对象,这些对象在产品的创建过程中不易得到。
namespace Builder
{
class Builder1
{
}

//Prodcut类
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);
}
}
}

//Builder类
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}

//具体建造者类
class ConcreteBuilder1 : Builder
{
private Product product = new Product();

public override void BuildPartA()
{
product.Add(
"部件A");
}

public override void BuildPartB()
{
product.Add(
"部件B");
}

public override Product GetResult()
{
return product;
}
}

class ConcreteBuilder2 : Builder
{
private Product product = new Product();

public override void BuildPartA()
{
product.Add(
"部件X");
}

public override void BuildPartB()
{
product.Add(
"部件Y");
}

public override Product GetResult()
{
return product;
}
}

//指挥者类
class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
}

Program.cs

代码
using System;
using System.Collections.Generic;
using System.Text;

namespace Builder
{
class Program
{
static void Main(string[] args)
{
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
= b2.GetResult();
p2.Show();

Console.Read();
}
}
}

运行结果:

产品 创建 ----

部件A

部件B

产品 创建 ----

部件X

部件Y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值