来说说<Builder>创建模式

本文通过一个组装电脑的例子,详细介绍了创建者模式的概念及其应用。创建者模式能够将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是创建者模式?在什么时候使用?

当我们要创建一个复杂的系统,并且这种系统由着特定的复杂的步骤组合而成,我们要怎么办?就像老板要你去采购一批电脑,电脑的配置各有所不同,品牌也不同,而电脑由不同的部件组成,主板,内存,显示器,机箱等组成,而你不肯能一个一个零件的去采购,然后在来组装,这时候,我们就需要去找电脑城的老板,去找不同品牌的老板,让老板来给你组装好成品的电脑,你只需要付钱就可以拿到不同的电脑,这就是一个常见的创建者模式,老板就充当了Builder,从每个老板那儿拿到不同的配置,不同品牌的电脑。好,我们来实现这个简单的模式?

2.我们来实现这个系统

我们来实现电脑Class - Computer
/// <summary>
///  创建者模式
/// </summary>
public class Computer
{
	private IList<string> parts = new List<string>();

	//把单个组件添加到电脑组合中
	public void Add(string part)
	{
		parts.Add (part);
	}

	public void Show()
	{
		Debug.Log ("电脑开始组装");
		foreach(string patrs in parts)
		{
			Debug.Log ("组件名称:" + parts +"已经组装好");
		}
		Debug.Log (" 电脑组装结束");
	}
		
}
我们来实现一个抽象的接口class-Builder
/// <summary>
/// 电脑的组装着
/// </summary>
public abstract class Builder
{
	//装CPU
	public abstract void BuilderPartCPU ();

	//装主板
	public abstract void BuildMainBoard();

	//获得组装好的电脑
	public abstract Computer getComputer();
}
我们在来实现两个创建者 class - ConcreateBuilder1
/// <summary>
/// 具体的创建者
/// </summary>
public class ConcreateBuilder1 : Builder
{
	Computer computer = new Computer();
	public override void BuilderPartCPU()
	{
		computer.Add ("CPU1");
	}
	public override void BuildMainBoard()
	{
		computer.Add ("Main board1");
	}

	public override Computer getComputer ()
	{
		return computer;
	}
}
/// <summary>
/// 具体的创建者2
/// </summary>
public class ConcreateBuilder2 : Builder
{
	Computer computer = new Computer();
	public override void BuilderPartCPU()
	{
		computer.Add ("CPU2");
	}
	public override void BuildMainBoard()
	{
		computer.Add ("Main board2");
	}

	public override Computer getComputer ()
	{
		return computer;
	}
}

我们来实现一个导演类,也就是古代打仗的时候的将军,他负责指挥整个战斗的进行。
public class Director
{
	public void Construct(Builder builder)
	{
		builder.BuilderPartCPU ();
		builder.BuildMainBoard ();
	}
}

我们来测试
public class Customer
{
	public void MainTest()
	{
		Builder builder1 = new ConcreateBuilder1 ();
		Builder builder2 = new ConcreateBuilder2 ();

		Director direct = new Director ();

		//老板让第一个人去组装电脑
		direct.Construct (builder1);
		Computer comp1 = builder1.getComputer ();
		comp1.Show ();

		//老板让第二个人去组装电脑
		direct.Construct(builder2);
		Computer comp2 = builder2.getComputer ();
		comp2.Show ();
	}
}

3。我们来说说他的特点。

(1)指挥者直接与客户打交道,而客户也丝毫不用关系产品的构造过程,指挥者把客户的请求委托给每一个创建者。
(2)建造者模式主要用于“分步骤来构建一个复杂的对象”,其中“分步骤”是一个固定的组合过程,而复杂对象的各个部分是经常变化的(也就是说电脑的内部组件是经常变化的,这里指的的变化如硬盘的大小变了,CPU由单核变双核等
      (3)产品不需要抽象类,由于建造模式的创建出来的最终产品可能差异很大,所以不大可能提炼出一个抽象产品类
      (4)在前面文章中介绍的抽象工厂模式解决了“系列产品”的需求变化,而建造者模式解决的是 “产品部分” 的需要变化
      (5  由于建造者隐藏了具体产品的组装过程,所以要改变一个产品的内部表示,只需要再实现一个具体的建造者就可以了,从而能很好地应对产品组成组件的需求变化



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值