设计模式之七:建造模式(Builder Pattern)

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

适用范围:

  1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  2. 当构造过程必须允许被构造的对象有不同表示时。

建造者模式里面有四个角色:

  1. Builder: 给出一个抽象接口,以规范产品对象的各个组成部分的建造。一般而言,此接口独立于应用程序的业务逻辑。模式中直接创建产品对象的具体创建者角色。具体创建者角色必须实现这个接口的所有方法:一个是建造方法,另一个是结果返还方法。
  2. ConcreteBuilder:担任这个角色的是与应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括:实现Builder角色提供的接口,一步一步完成创建产品实例的过程。在建造过程完成后,提供产品的实例。
  3. Director:担任这个角色的类调用具体建造者以创建产品对象。指导者角色并没没用产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。
  4. Product: 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

                              

                      

具体实现代码如下:

public class Client

{

public void Test()

{

Director d = new Director();

IBuilder b1 = new ConcreteBuilder1();

IBuilder b2 = new ConcreteBuilder2();

d.Construct(b1);

Product p1 = b1.GetResult();

p1.ShowResult();

d.Construct(b2);

Product p2 = b2.GetResult();

p2.ShowResult();

}

}

public class Director

{

public void Construct(IBuilder builder)

{

builder.BuildPartA();

builder.BuildPartB();

}

}

public interface IBuilder

{

void BuildPartA();

void BuildPartB();

Product GetResult();

}

public class ConcreteBuilder1 : IBuilder

{

private Product product;

public ConcreteBuilder1()

{

this.product =new Product();

}

public void BuildPartA()

{

product.Add("PartA");

}

public void BuildPartB()

{

product.Add("PartB");

}

public Product GetResult()

{

return product;

}

}

public class ConcreteBuilder2 : IBuilder

{

private Product product;

public ConcreteBuilder2()

{

this.product = new Product();

}

public void BuildPartA()

{

product.Add("PartX");

}

public void BuildPartB()

{

product.Add("PartY");

}

public Product GetResult()

{

return product;

}

}

public class Product

{

List<string> lst = new List<string>();

public void Add(string part)

{

lst.Add(part);

}

public void ShowResult()

{

foreach (string part in lst)

{

Console.WriteLine(part);

}

}

}

实现要点:

1.  建造者模式主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。

2.  产品不需要抽象类,特别是由于创建对象的算法复杂而导致使用此模式的情况下或此模式应用于产品的生成过程,其最终结果可能差异很大,不大可能提炼出一个抽象产品类。

3.  创建者中的创建子部件的接口方法不是抽象方法而是空方法,不进行任何操作,具体的创建者只需要覆盖需要的方法就可以。

4.  抽象工厂模式解决“系列对象”的需求变化,而Builder模式解决“对象部分”的需求变化,建造者模式常和组合模式(Compsite Pattern)结合使用。

效果

  1. 建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
  2. 每一个Builder都相对独立,而与其它的Builder无关。
  3. 可使对构造过程更加精细控制。
  4. 将构建代码和表示代码分开。
  5. 建造模式的缺点在于难于应付“分步骤构建算法”的需求变动。

适用性:

以下情况应当使用建造者模式:

  1. 需要生产的产品对象有复杂的内部结构
  2. 需要生产的产品对象的属性相互依赖,建造者模式可以强迫生成顺序
  3. 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不容易得到。
时间: 2024-12-29 10:55:03

设计模式之七:建造模式(Builder Pattern)的相关文章

【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern

1 package com.tn.pattern; 2 3 public class Client { 4 public static void main(String[] args) { 5 Director director=Director.getInstance(); 6 director.construct(new ConcreteBuilder1()); 7 director.construct(new ConcreteBuilder2()); 8 } 9 } 10 11 class

设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 使用方法

装饰者模式(Decorator Pattern) Java的IO类 使用方法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26716823 装饰者模式(decorator pattern)参见: http://blog.csdn.net/caroline_wendy/article/details/26707033 Java的IO类使用装饰者模式进行扩展, 其中FilterInputStream类, 就是装饰者(decora

【设计模式】建造模式

引子 前几天陪朋友去装机店攒了一台电脑,看着装机工在那里熟练的装配着机器. 作为装机工,他们不用管你用的 CPU 是 Intel 还是 AMD,也不管你的显卡是 2000 千大元还是白送的,都能三下五除二的装配在一起. 一台 PC 就诞生了! 当然对于客户来说,你也不知道太多关于 PC 组装的细节. 这和建造模式是多么的相像啊! 定义与结构 GOF 给建造模式的定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话说得很抽象,不好理解,其实它的意思可以理解为:

如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往文中插入几个表情的趋势了, 但是你真的插的姿势对了吗?这种事情不是随便插的,来来来,给你 见识下如何在适当的场景插入适当的表情以让读者感觉到易可赛艇, 本文以讲故事插表情为主,讲述桥接模式为辅,多图预警, 简书上排版可能有些问题,最佳排版可见: https://www.zybuluo.com/coder-pig/note

设计模式 - 装饰者模式(Decorator Pattern) 详解

装饰者模式(Decorator Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26707033 装饰者模式(Decorator Pattern):动态地将责任附加到对象上. 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案. 使用方法: 1. 首先创建组件(Component)父类, 所有类,具体组件(Concrete Component)和装饰者(Decorator)都属于这一类型, 可以进行扩展

如何让孩子爱上设计模式 ——14.策略模式(Strategy Pattern)

如何让孩子爱上设计模式 --14.策略模式(Strategy Pattern) 描述性文字 本节讲解的是行为型设计模式中的第一个模式: 策略模式, 这个模式非常简单,也很好理解. 定义一系列的算法,把每个算法封装起来,并使得他们可以相互替换, 让算法独立于使用它的客户而变化. 一般用来替换if-else,个人感觉是面向过程与面向对象思想的 过渡,这里举个简易计算器的栗子,帮助理解~ 普通的if-else/switch计算器 普通的面向过程if-else简易计算器代码如下: 运行结果如下: 这里我

建造者模式(Builder Pattern)

模式定义 造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. UML类图 Builder:抽象建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品角色 代码结构 public static class BuilderApp { public static void Run() { Director director = new Director(); Builder b1 = new

C#设计模式:解释器模式(Interpreter Pattern)

一,C#设计模式:解释器模式(Interpreter Pattern) 1,解释器模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易抽象为语法规则的问题”才适合使用解释器模式2,解释器设计模式每个解释的类有自己的规则,并且与其他业务规则不冲突 二,如下代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; u

设计模式(创建型)之建造者模式(Builder Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端压根不用知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可.它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性. 问题来了... 你可能会有疑惑,建造者模式和抽象工