建造者模式:
将一个复杂对象的构建于它的表示分离,似的同样的构建过程可以创建不同的表示
什么时候使用建造者模式?
如果你需要将一个复杂对象的构建与它的表示分离,似的同样的构建过程可以创建不同的表示的意图时,我们就需要应用建造者模式。
使用建造者模式带来的好处:
以此来将一个产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。这时候用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。
怎样用建造者模式?
- 定义一个抽象的建造者类
- 建造具体建造者类,让具体的建造者类去继承抽象类,那就必须去重写抽象方法(如果不这样的话编译器就不会让其通过)
- 建造指挥者类,用它来控制建造过程,也用它来隔离用户与建造过程的关联
建造者模式结构图:
建造者模式实现代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 建造者设计模式
{
class Program
{
static void Main(string[] args)
{
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
//指挥者用ConcretebUilder的方法来建造产品
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();
//指挥者用ConstreteBuilder2的方法建造产品
director.Construct(b2);
Product p2 = b2.GetResult();
p2.Show();
Console.Read();
}
}
//产品类
class Product
{
//使加进来的部件有序的进行,一般情况下按照加进去的元素时间来排序,
//先加的序号就更小,从下标为 0 开始,当你删除了其中一个元素的时候,会自动在排序一次.
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);
}
}
}
//抽象建造者类,确定产品由PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult
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();
}
}
}
建造者模式运行结果:
所以说建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式,在创建时有了建造模式就不会出现丢三落四的现在了。
分享到:
相关推荐
设计模式之建造者模式代码示例,
C#设计模式之建造者模式应用实例
Java创建型设计模式之建造者模式详解.rar
用一个建造房屋的生动实例讲述了设计模式中常用的建造者模式的真谛,跟大家一起交流。附有相应类图
这个http://blog.csdn.net/dawanganban/article/details/9990405博客中java设计模式的源代码。下载前请先看《设计模式——建造者模式》一文。
本文实例讲述了Python设计模式之建造者模式。分享给大家供大家参考,具体如下: 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 下面是一个建造者模式的...
Java设计模式-建造者模式详解
本文实例讲述了PHP设计模式之建造者模式。分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1)。 来点我人类能听懂的话: 1、在客户端看来需要的仅仅...
主要介绍了JavaScript设计模式之建造者模式,结合实例形式分析了设计模式中建造者模式的概念、功能及JavaScript实现与使用建造者模式的相关操作技巧,需要的朋友可以参考下
NULL 博文链接:https://wy649898543.iteye.com/blog/1431751
主要帮助大家理解java设计模式之建造者模式,对建造者模式,即生成器模式进行实例讲解,感兴趣的朋友可以参考一下
主要介绍了Java设计模式之建造者模式(Builder模式)介绍,本文讲解了为何使用建造者模式、如何使用建造者模式、Builder模式的应用等内容,需要的朋友可以参考下
主要介绍了Java设计模式之建造者模式,结合具体实例形式分析了建造者模式的概念、原理、实现方法与相关使用注意事项,需要的朋友可以参考下
这个建造者模式,我们也可以称为生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式,简单点来说就是为了消除其它对象复杂的创建过程...
C#设计模式之建造者(Builder)模式示例源代码