Builder模式的缘起:
    假设创建游戏中的一个房屋House设施,该房屋的构建由几部分组成,且各个部分富于变化。如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正.....
动机(Motivation):
    在软件系统中,有时候面临一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合到一起的算法却相对稳定。
    如何应对这种变化呢?如何提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化,从而保持系统中的"稳定构建算法"不随需求的改变而改变?
意图(Intent):
    将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
                                              -------《设计模式》GOF

结构图(Struct):    
               

协作(Collaborations):
                  

生活中的例子:
             
适用性:
    
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
    2.当构造过程必须允许被构造的对象有不同的表示时。
实例代码:

Builder类:

    public abstract class Builder{public abstract void BuildDoor();public abstract void BuildWall();public abstract void BuildWindow();public abstract void BuildFloor();public abstract void BuildHouseCeiling();public abstract House GetHouse();}

Director类:这一部分是 组合到一起的算法(相对稳定)。

        public void Constract(Builder builder){builder.BuildWall();builder.BuildHouseCeiling();builder.BuildDoor();builder.BuildWindow();builder.BuildFloor();}

ChineseBuilder类

    public class ChineseBuilder: Builder{private House ChineseHouse = new House();public override void BuildDoor(){Console.WriteLine("this Door 's style of Chinese");}public override void BuildWall(){Console.WriteLine("this Wall 's style of Chinese");}public override void BuildWindow(){Console.WriteLine("this Windows 's style of Chinese");}public override void BuildFloor(){Console.WriteLine("this Floor 's style of Chinese");}public override void BuildHouseCeiling(){Console.WriteLine("this Ceiling 's style of Chinese");}public override House GetHouse(){return ChineseHouse;}}

RomanBuilder类:
    public class RomanBuilder:Builder{private House RomanHouse = new House();public override void BuildDoor(){Console.WriteLine("this Door 's style of Roman");}public override void BuildWall(){Console.WriteLine("this Wall 's style of Roman");}public override void BuildWindow(){Console.WriteLine("this Windows 's style of Roman");}public override void BuildFloor(){Console.WriteLine("this Floor 's style of Roman");}public override void BuildHouseCeiling(){Console.WriteLine("this Ceiling 's style of Roman");}public override House GetHouse(){return RomanHouse;}}

House类

    public class House{public void Show(){Console.WriteLine("House");}}

ChineseBuilder和RomanBuilder这两个是:这个复杂对象的两个部分经常面临着剧烈的变化。

    class Program{static void Main(string[] args){Director director = new Director();Builder instance;Console.WriteLine("Please Enter House No:");string no = Console.ReadLine();string houseType = ConfigurationSettings.AppSettings["No" + no];Assembly ass = Assembly.GetExecutingAssembly();Type type = ass.GetType(ass.GetName().Name + ".FactoryMethod." + houseType);object obj_builder = Activator.CreateInstance(type);instance = (Builder)obj_builder;director.Constract(instance);House house = instance.GetHouse();house.Show();Console.ReadLine();}}

配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration><appSettings><add key="No1" value="RomanBuilder"></add><add key="No2" value="ChineseBuilder"></add></appSettings>
</configuration>

Builder模式的几个要点:

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

Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动。其缺点在于难以应对“分步骤构建算法”的需求变动。

Abstract Factory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。Builder械通常和Composite模式组合使用。

转载于:https://www.cnblogs.com/1285026182YUAN/p/5145103.html

3.建造者模式(Builder)相关推荐

  1. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  2. 建造者模式(Builder)——从组装电脑开始

    建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...

  3. Android设计模式之建造者模式builder

    今天小编来说一下Android中的一种设计模式--建造者模式Builder 绪论: 那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,我们经常用的Al ...

  4. Net设计模式实例之建造者模式(Builder Pattern)(2)

    四.案例分析(Example) 1.场景 假设房子只有房顶和墙(Roof And Walls)<?XML:NAMESPACE PREFIX = O /> Jane和 Joe两个客户需要从建 ...

  5. 大话设计模式--建造者模式 Builder -- C++实现实例

    1. 建造者模式,将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了. 关键类Directo ...

  6. 一天一个设计模式之建造者模式(Builder)

    建造者模式,属于创建型模式,其目的在于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用情况: • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. ...

  7. Activiti源码之建造者模式 Builder

    建造者模式介绍 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类 ...

  8. 设计模式之建造者模式(Builder)

    建造者模式原理:建造模式主要是用于产生对象的各个组成部分,而抽象工厂模式则用于产生一系列对象,建造者模式而且要求这些对象的组成部分有序. 代码如下: #include <iostream> ...

  9. 建造者模式Builder

    简介 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象.一个 ...

  10. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

最新文章

  1. 经典不过时,回顾DeepCompression神经网络压缩
  2. pwd python 安装 模块_Python自动化办公之邮件定时发送
  3. 浅析枚举类型(Enumerated types)
  4. 敏捷个人俱乐部2012年2月线下活动:活出我的最好生活
  5. 文件目录管理及vi编辑器的使用
  6. js innerHTML 改变div内容的方法
  7. 大咖分享会 | 百度首次揭秘如何构建用户画像与移动统计
  8. Docker使用阿里云docker镜像加速
  9. 20190809:旋转数组
  10. 【参赛作品19】【openGauss】gsql客户端工具(二)gsql客户端工具之Data Studio客户端工具
  11. Struts2学习笔记(4)-ActionSupport类及Action接口详解
  12. ie8 升级页面html,ie7浏览器怎么升级到ie8?
  13. CAD几何引擎和图形引擎的关系
  14. 一个不错的控件网站-慧都控件网
  15. 数仓1.4 |业务数仓搭建| 拉链表| Presto
  16. 网站安全检测漏洞扫描系统邮件安全
  17. 运维派 » 你有自己的Web缓存知识体系吗?
  18. can‘t connect to mysql server on localhost解决办法。 net start mysql——无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
  19. iPhoneXR为最畅销iPhone难解外界对苹果的担忧
  20. 图片怎么做雕刻路径_精雕图怎么做路径

热门文章

  1. MATLAB案例学习-基于雷达和摄像头的传感器融合
  2. java跑到linux上,Java程序在Linux上运行虚拟内存耗用很大
  3. mysql 传送时间_vue处理mysql数据库中的时间数据(datetime)
  4. hive币2021年预计涨到多少_星时代云播|IPFS/Filecoin的价值被严重低估, FIL能不能涨到300美金?...
  5. android开发 视图联动_android开发_ViewGroup(组视图)-- 五大布局
  6. python安装opencv2.4.9_Python学习之一:Python2.7与opencv2.4安装配置
  7. linux应用对物理内存映射,深入理解Linux内存映射机制 (1)
  8. SpringBoot快速入门Demo
  9. java获取请求的url地址
  10. JavaScript写一个能遍历对象和数组的通用forEach函数