建造者模式(Builder),将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。
如果需要将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示,此时适合使用建造者模式,使用了建造者模式,用户只需要指定建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。
建造者模式UML类图:
如上图所示,product是具体的产品类,Builder是为如何创建一个Product对象的各个部件指定的抽象接口。ConcreteBuilder是具体建造者,实现Builder接口,构造和装配各个部件。而Director是指挥者,构建一个使用Builder 接口的对象。
建造者模式实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder
{
/*
* 产品类,有多个部件组成
*/
class Product
{
List<String> parts = new List<string>();
public void add(String part)
{
parts.Add(part);
}
public void show()
{
Console.WriteLine("产品创建...");
foreach (String part in parts)
{
Console.WriteLine(part);
}
}
}//class
/*
* Builder类,抽象建造者类,确定产品由几个部件组成并声明一个得到产品
* 建造后结果的方法getResult()
*/
abstract class Builder
{
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public abstract Product getResult();
}
/*
* 具体建造者类
*/
class ConcreteBuildType1 : Builder
{
private Product product = new Product();
public override void buildPartA()
{
product.add("类型1物品,部件1...");
//throw new NotImplementedException();
}
public override void buildPartB()
{
product.add("类型1物品,部件2...");
//throw new NotImplementedException();
}
public override void buildPartC()
{
product.add("类型1物品,部件3...");
//throw new NotImplementedException();
}
public override Product getResult()
{
return this.product;
//throw new NotImplementedException();
}
}
class ConcreteBuildType2 : Builder
{
private Product product = new Product();
public override void buildPartA()
{
product.add("类型2物品,部件1...");
//throw new NotImplementedException();
}
public override void buildPartB()
{
product.add("类型2物品,部件2...");
//throw new NotImplementedException();
}
public override void buildPartC()
{
product.add("类型2物品,部件3...");
//throw new NotImplementedException();
}
public override Product getResult()
{
return this.product;
//throw new NotImplementedException();
}
}
/*
* 指挥者类用来指挥建造过程
*/
class Director
{
public void Construct(Builder builder)
{
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
}
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder
{
class Program
{
static void Main(string[] args)
{
Director director1 = new Director();
Builder builder1 = new ConcreteBuildType1();
Builder builder2 = new ConcreteBuildType2();
director1.Construct(builder1);
Product product1 = builder1.getResult();
product1.show();
Director director2 = new Director();
director2.Construct(builder2);
Product product2 = builder2.getResult();
product2.show();
Console.Read();
}
}
}
建造者模式总结:
建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常是面临着复杂的变化。
建造者模式是在当前创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。
使用建造者模式可以使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
分享到:
相关推荐
本文实例讲述了PHP设计模式:建造者模式Builder。分享给大家供大家参考,具体如下: 1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求...
C#设计模式之建造者(Builder)模式示例源代码
设计模式C++学习之建造者模式(Builder)
明确建造者(Builder)、具体建造者(Concrete Builder)、指导者(Director)、产品(Product)之间的职责和联系。 ◆建造者(Builder): 给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,...
建造者模式【Builder Pattern】(二)问题改进
建造者模式【Builder Pattern】(一)问题提出
NULL 博文链接:https://wy649898543.iteye.com/blog/1431751
建造者模式是一种创建型设计模式,用于简化复杂对象的创建过程。以下是建造者模式的关键概念和步骤: 1. **分离复杂对象的构建和表示**:建造者模式将一个复杂对象的构建过程与其最终的表示形式分离开来。这样做的...
Java 设计模式-建造者模式(Builder)结合Android小知识讲解,简单明了
10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式...
主要为大家详细介绍了java实现建造者模式Builder Pattern,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...
主要介绍了C++设计模式之建造者模式Builder的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
建造者模式【Builder Pattern】(三)问题引申
3.设计模式Design Pattern:创建型模式(厂模式Factory、抽象工厂模式Abstract Factory、单例模式Singleton、建造者模式Builder、原型模式Prototype和对象池模式Object Pool Pattern)、结构型模式(适配器模式、...
建造者模式【Builder Pattern】(一)问题改进
主要介绍了Java设计模式之建造者模式(Builder模式)介绍,本文讲解了为何使用建造者模式、如何使用建造者模式、Builder模式的应用等内容,需要的朋友可以参考下
建造者模式 由四部分组成: 1.Director(指挥者): 如果创建对象的流程所在 2.Builder(抽象接口): 创建对象要实现的细节,流程依赖着细节 3.ConcreteBuilder(具体构建对象): 创建对象的具体细节实现 4.Product(具体...
php /** * 建造者模式 * * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 */ class Product { public $_type = null; public $_size = null; public $_color = null; public function ...