设计模式之五:建造者模式
2017-01-22 16:24
281 查看
建造者模式(Builder Pattern)也叫生成器模式:
定义:Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示)
建造者模式通常包括以下几个角色:
1、Builder : 给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建;
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。在建造过程完成后,提供产品的实例。
3、Director: 调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建
4、Product:要创建的复杂对象。
结构体如下:
优点:
1、将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,使得我们能够更加精确的控制复杂对象的产生过程
2、将产品的创建过程与产品本身分离出来,可以使用相同的创建过程来得到不同的产品。也就是说细节依赖抽象
3、每一个具体创建者都相对独立,而与其他的具体创建建造者无关,因此可以很方便的替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
缺点:
1、建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制;
2、如果产品的内部变化复杂,可能会导致需要定义很多具体建造者来实现这种变化,导致系统变得很庞大。
使用场景:
1、相同的方法,不同的执行顺序,产生不同的事件结果时,可采用此模式
2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式
3、产品类结构复杂,或者产品类中的调用顺序不同产生了不同的效能,可使用该模式
实现:
/// <summary>
/// 产品类
/// </summary>
public class Product
{
public void DoSomething()
{
//独立业务处理
}
}
/// <summary>
/// 抽象建造者
/// </summary>
public abstract class Builder
{
//设置产品的不同部分,以获得不同的产品
public abstract void SetPart();
//建造产品
public abstract Product BuildProduct();
}
/// <summary>
/// 具体建造者
/// </summary>
public class ConcreateProduct : Builder
{
private Product product = new Product();
public void SetPart()
{
//产品内部逻辑处理
}
//组建一个产品
public Product BuildProduct()
{
return product;
}
}
/// <summary>
/// 导演类
/// </summary>
public class Director
{
private Builder builder = new ConcreateProduct();
public Product GetAProduct()
{
builder.SetPart();
/*
* 设置不同的零件,产生不同产品
*/
return builder.BuildProduct();
}
}好了,这一章就写到这,欢迎大家加入QQ群:280993838 。或者关注我的公众号:
定义:Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示)
建造者模式通常包括以下几个角色:
1、Builder : 给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建;
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。在建造过程完成后,提供产品的实例。
3、Director: 调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建
4、Product:要创建的复杂对象。
结构体如下:
优点:
1、将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,使得我们能够更加精确的控制复杂对象的产生过程
2、将产品的创建过程与产品本身分离出来,可以使用相同的创建过程来得到不同的产品。也就是说细节依赖抽象
3、每一个具体创建者都相对独立,而与其他的具体创建建造者无关,因此可以很方便的替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
缺点:
1、建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制;
2、如果产品的内部变化复杂,可能会导致需要定义很多具体建造者来实现这种变化,导致系统变得很庞大。
使用场景:
1、相同的方法,不同的执行顺序,产生不同的事件结果时,可采用此模式
2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式
3、产品类结构复杂,或者产品类中的调用顺序不同产生了不同的效能,可使用该模式
实现:
/// <summary>
/// 产品类
/// </summary>
public class Product
{
public void DoSomething()
{
//独立业务处理
}
}
/// <summary>
/// 抽象建造者
/// </summary>
public abstract class Builder
{
//设置产品的不同部分,以获得不同的产品
public abstract void SetPart();
//建造产品
public abstract Product BuildProduct();
}
/// <summary>
/// 具体建造者
/// </summary>
public class ConcreateProduct : Builder
{
private Product product = new Product();
public void SetPart()
{
//产品内部逻辑处理
}
//组建一个产品
public Product BuildProduct()
{
return product;
}
}
/// <summary>
/// 导演类
/// </summary>
public class Director
{
private Builder builder = new ConcreateProduct();
public Product GetAProduct()
{
builder.SetPart();
/*
* 设置不同的零件,产生不同产品
*/
return builder.BuildProduct();
}
}好了,这一章就写到这,欢迎大家加入QQ群:280993838 。或者关注我的公众号:
相关文章推荐
- 设计模式学习笔记之建造者模式
- 设计模式---建造者模式
- 设计模式之 建造者模式
- 设计模式:建造者模式
- 每天一设计模式之建造者模式
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式笔记(九) —— 建造者模式
- 设计模式之建造者模式
- 我读设计模式之建造者模式(Builder Pattern)
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- 设计模式---建造者(Builder)模式,有关系图
- .NET设计模式(4):建造者模式(Builder Pattern)
- .NET设计模式(4):建造者模式(Builder Pattern)
- Java设计模式-----Builder建造者模式
- .NET设计模式(4):建造者模式(Builder Pattern)
- DOTA版设计模式——建造者
- C#设计模式之建造者(Builder)模式示例源代码