建造者模式

建造者模式

建造者模式的定义

​ 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

​ 通俗点讲:

​ 1.建造者是一种创建型模式,目的是创建所需要的对象

​ 2.同工厂模式不一样的是,建造者的重心在如何组装对象而不是如何new对象

建造者模式的角色

​ 1.产品 要创建的产品

​ 2.抽象建造者 定义了组装产品的组装步骤

​ 3.具体建造者 具体实现了组装产品的组装各个步骤

​ 4.导演 指挥具体建造者去执行各个步骤

UML图例

在这里插入图片描述

代码实现

首先定义一个产品,这个产品有很多部件:parts: List, 添加部件的方法AddPart(string)和展示方法Show()

namespace DesignModel.BuilderPattern
{
	public class Product 
	{
		List<string> parts;

		public Product()
		{
			parts = new List<string>();
		}

		public void AddPart(string part)
		{
			parts.Add(part);
		}

		public void Show()
		{
			for(int i=0; i<parts.Count; i++)
			{
				Debug.Log("part " + i + " : " + parts[i]);
			}
		}
	}
}

然后定义我们的抽象建造者,这个抽象建造者定义了两个组装部件的方法,和获取实例的方法

namespace DesignModel.BuilderPattern
{
	public interface IBuilder 
	{
		void CreatePart1();
		void CreatePart2();
		Product GetResult();
	}
}

定义一个具体的建造者去实现如何创建和组装产品

namespace DesignModel.BuilderPattern
{
	public class ConcreteBuilder : IBuilder 
	{
		private Product product = null;
		public ConcreteBuilder()
		{
			product = new Product();
		}
		public void CreatePart1()
		{
			product.AddPart("Part0");
		}
		public void CreatePart2()
		{
			product.AddPart("Part1");
		}
		public Product GetResult()
		{
			return product;
		}	
	}
}

定义我们的导演类,控制建造者组装具体的产品

namespace DesignModel.BuilderPattern
{
	public class Director 
	{
		public void Construct(IBuilder builder)
		{
			builder.CreatePart1();
			builder.CreatePart2();
		}
	}
}

Client调用测试

using DesignModel.BuilderPattern;
public class BuilderClient : MonoBehaviour 
{
	void Start () 
	{
		//创建建造者
		ConcreteBuilder builder = new ConcreteBuilder();
		//创建导演
		Director director = new Director();
		//组装产品
		director.Construct(builder);
		//获取产品
		Product product = builder.GetResult();
		//展示产品
		product.Show();
	}
}
//结果
//part 0 : Part0
//part 1 : Part1
建造者模式的优点

1.将复杂产品的创建和组装分离了

​ 在例子里,我们在建造者的构造函数中new了产品对象,这个时候的对象只具有一个空架子,而没有具体的部件,接着在导演Director中,去完成了产品对象部件的组装

2.抽象了建造者,使得导演用同样的建造过程可以创建出不同的产品,细节依赖于抽象

​ 在我们的例子中,给导演不同的建造者,就能创建出部件不同的产品,而实际上,将产品抽象后,也可以用不同的建造者创建产品类型、部件都不同的产品

3.抽象了建造者,新增建造者和产品类型无需改动代码,符合开放封闭原则

建造者模式的缺点

1.产品需要具有共性,才能抽象出抽象的建造者

2.产品类别复杂的话,需要定义很多的建造者

适用范围

1.构建复杂,但具有共性的产品

2.要求方便修改构建顺序

3.要求相同的构建顺序可以产出不同的产品

拓展

提供一个接口去作为部件接口,而具体部件继承自这个接口

namespace DesignModel.BuilderPattern
{
	public interface IPart {}
	public class Product 
	{
		List<IPart> parts;

		public Product()
		{
			parts = new List<IPart>();
		}

		public void AddPart(IPart part)
		{
			parts.Add(part);
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值