建造者模式(Builder)

定义

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

类图

描述

Builder:定义一个建造者抽象类,以规范产品对象的各个组成部分的建造。这个接口规定要实现对象的哪些部分的创建,并不涉及具体的对象部件的创建。

ConcreteBuilder:继承Builder,针对不同的业务逻辑,具体化对象的各部分的创建。在建造过程完成后,提供产品的实例。

Director:调用具体建造者来创建对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

Product:要创建的对象。

建造者模式仅仅只比工厂模式多了一个"Director类"的角色。

应用场景

以生产轿车为例,建造者负责生产汽车的各个部件,而指挥者负责指挥建造者按流程组装轿车。

    /// <summary>/// 发动机/// </summary>public class Engine{public string Description { get; set; }}/// <summary>/// 车体结构/// </summary>public class Body{public string Description { get; set; }}/// <summary>/// 车轮/// </summary>public class Wheel{public string Description { get; set; }}/// <summary>/// 汽车/// </summary>public class Car{public Body body { get; set; }public Engine engine { get; set; }public Wheel wheel { get; set; }}/// <summary>/// 建造者接口/// </summary>public interface IBuilder{void BuildBody();void BuildEngine();void BuildWheel();Car CreateCar();}/// <summary>/// 奥迪建造者/// </summary>public class BuilderAudi : IBuilder{private Car car = new Car();public void BuildBody(){car.body = new Body() { Description = "奥迪的车身结构." };Console.WriteLine(string.Format("安装{0}", car.body.Description));}public void BuildEngine(){car.engine = new Engine() { Description = "奥迪的发动机." };Console.WriteLine(string.Format("安装{0}", car.engine.Description));}public void BuildWheel(){car.wheel = new Wheel() { Description = "奥迪的车轮." };Console.WriteLine(string.Format("安装{0}", car.wheel.Description));}public Car CreateCar(){Console.WriteLine("奥迪车安装完成.");return car;}}/// <summary>/// 奔驰建造者/// </summary>public class BuilderBenz : IBuilder{private Car car = new Car();public void BuildBody(){car.body = new Body() { Description = "奔驰的车身结构." };Console.WriteLine(string.Format("安装{0}", car.body.Description));}public void BuildEngine(){car.engine = new Engine() { Description = "奔驰的发动机." };Console.WriteLine(string.Format("安装{0}", car.engine.Description));}public void BuildWheel(){car.wheel = new Wheel() { Description = "奔驰的车轮." };Console.WriteLine(string.Format("安装{0}", car.wheel.Description));}public Car CreateCar(){Console.WriteLine("奔驰车安装完成.");return car;}}/// <summary>/// 指挥者/// </summary>public class Director{public void Constrcut(IBuilder builder){builder.BuildBody();builder.BuildEngine();builder.BuildWheel();}}

转载于:https://www.cnblogs.com/zhou-yi/p/5318489.html

设计模式之笔记--建造者模式(Builder)相关推荐

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

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

  2. 设计模式学习笔记——建造者(Builder)模式

    设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...

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

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

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

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

  5. 设计模式之路 | 建造者模式

    模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...

  6. Java 设计模式情景分析——建造者模式

    当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...

  7. 【设计模式自习室】建造者模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

  8. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

  9. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

最新文章

  1. 【ACM】杭电OJ 1862
  2. Docker 容器技术 — docker run
  3. matlab 神经网络编程入门系列(1)
  4. SSM始用 @Autowired(required = false)的一个坑
  5. java nature_Java中BufferedReader和scanner的对比 - nature
  6. DataFrame不同风格比较
  7. iOS-按钮单选与多选逻辑处理
  8. 任正非:将来华为岗位分三类 职员类岗位不涉及末位淘汰
  9. 学生教育云平台登录入口_学校安全教育平台登录入口
  10. iOS UITextField设置起始字符开始位置
  11. 农业银行网银兼容银河麒麟软件操作系统试点成功
  12. Spring和Mybatis整合-mapper开发
  13. 算法与数据结构1800题 图
  14. 一片文章彻底搞懂各种DDos攻击方式
  15. 【视频教程】帝国CMS制作网站系列教程08—单页模板的制作
  16. Qt的工程文件(.pro) -- 转
  17. java imageio write,java – 使用ImageIO.write jpg文件的问题
  18. Win10系统CLSID大全
  19. oracle 基本命令及常用的查询语句
  20. Day6-2021.1.14 计算机网络面经从基础到总结+力扣 链表 题目的整理。

热门文章

  1. vs无法启动程序 系统找不到指定文件_进不了系统时要做的事情
  2. anaconda 更改路径_一文教你如何运用Anaconda帮助Python编程
  3. 两数相加—C语言逐位相加版(注释详尽)
  4. Java用swing实现的贪吃蛇
  5. 2018ACM上海大都会赛: I. Matrix Game(最小费用最大流)
  6. VS2012全屏背景修改教程
  7. bzoj 2435: [Noi2011]道路修建(DFS)
  8. Kubernetes中Secret使用详解
  9. python后台架构Django教程——路由映射urls
  10. 有关8086必须记住的几个数(持续更新)