设计模式之笔记--建造者模式(Builder)
建造者模式(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();
}
}
设计模式之笔记--建造者模式(Builder)的更多相关文章
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- IOS设计模式浅析之建造者模式(Builder)
定义 "将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现". 最初的定义出现于<设计模式>(Addison-Wesley,1994). 看这个概 ...
- Net设计模式实例之建造者模式(Builder Pattern)
一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...
- C# 设计模式巩固笔记 - 建造者模式
前言 写给自己-贵在坚持.建造者模式不复杂,但是想个形象的例子好难. 介绍-建造者模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实现 建造者模式主要是应对复杂 ...
- 学习笔记——建造者模式Builder
构造者模式.外部场景如果需要一个汽车类,它不需要关心如何构造,它只需要告诉Director需要什么,就可以从Director获得. 如:CDirector(IBuilder* aBuilder); 场 ...
- Java-马士兵设计模式学习笔记-建造者模式
一.概述 二.代码 1.Animal.java public interface Animal { public void bark(); } 2.Dog.java public class Dog ...
- 设计模式学习之建造者模式(Builder,创建型模式)(6)
假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子 第一步: 新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建 ...
随机推荐
- 转:learning to rank学习
learning to rank学习 转: http://blog.csdn.net/xuqianghit/article/details/8947819 1. 什么是learning to rank ...
- BZOJ1878:[SDOI2009]HH的项链——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题面源于洛谷 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的 ...
- [Leetcode] search in rotated sorted array ii 搜索旋转有序数组
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- [Leetcode] Binary tree postorder traversal二叉树后序遍历
Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...
- bzoj2083: [Poi2010]Intelligence test(二分+vector)
只是记录一下vector的用法 v.push_back(x)加入x v.pop_back()弹出最后一个元素 v[x]=v.back(),v.pop_back()删除x,但是会打乱vector顺序 v ...
- VS 2013 with update安装失败(kb2829760)解决方案
update过程中遇到kb2829760补丁无法更新而导致vs安装失败的解决方法: 1.安装KB2829760: 2.安装KB2829760中文语言包: 3.安装VS2013 with update. ...
- A great tutorial with Jupyter notebook for ML beginners
An end to end implementation of a Machine Learning pipeline SPANDAN MADAN Visual Computing Group, Ha ...
- SPOJ - HIGH :Highways (生成树计数)
Highways 题目链接:https://vjudge.net/problem/SPOJ-HIGH Description: In some countries building highways ...
- iOS通知传值
NSMutableDictionary *params = [NSMutableDictionary dictionary]; params[@"loginName"] = @&q ...
- bzoj3671 [Noi2014]随机数生成器
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3671 [题解] 贪心从1...n*m取,开两个5000*5000的数组就够了,可以重复利用, ...