定义:

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

组成部分:

1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4、Product:所要创建的复杂对象。

示例代码:

/*
建造者模式:builder 简写为B,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder :Builder_B 类
ConcreteBuilder:FerrariBuilder_B 类,可扩展性体现在这里
Director:Director_B 类,设置建造的顺序
Product:Car_B 类,得到产品 */
public abstract class Builder_B { public abstract void BuildCarName ();
public abstract void BuildCarDoor();
public abstract void BuildCarWindow();
public abstract void BuildCarWheel ();
public abstract void BuildCarBody ();
public abstract Car_B GetCar ();
}
using UnityEngine;

public class FerrariBuilder_B : Builder_B {

    private Car_B ferrari=new Car_B();

    public override void BuildCarName ()
{
ferrari.CarName = "法拉利";
} public override void BuildCarDoor ()
{
Debug.Log ("给法拉利安装车门");
} public override void BuildCarWindow ()
{
Debug.Log ("给法拉利安装车窗");
} public override void BuildCarWheel ()
{
Debug.Log ("给法拉利安装车轱辘");
} public override void BuildCarBody ()
{
Debug.Log ("生成出了一个法拉利车身");
} public override Car_B GetCar ()
{
return ferrari;
} }
using UnityEngine;

public class Director_B {

    public void Construct(Builder_B builder)
{
Debug.Log ("我是总指挥,\n由我来决定所有车的组装顺序");
builder.BuildCarName ();
builder.BuildCarBody ();
builder.BuildCarWheel ();
builder.BuildCarDoor ();
builder.BuildCarWindow ();
}
}
using UnityEngine;

public class Car_B {

    private string carName;
public string CarName {get;set;} public void ShowCar()
{
Debug.Log (CarName+"组装好了");
} }
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Client_B : MonoBehaviour { void Update () { //调用
if (Input.GetKeyDown(KeyCode.F)) {
Builder_B builder = new FerrariBuilder_B ();
Director_B director = new Director_B ();
director.Construct (builder);
Car_B car = builder.GetCar ();
car.ShowCar ();
}
} }

Unity C# 设计模式(五)建造者模式的更多相关文章

  1. C#设计模式(5)——建造者模式(Builder Pattern)

    一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ...

  2. C#设计模式之四建造者模式(Builder Pattern)【创建型】

    一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...

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

    前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...

  4. 【GOF23设计模式】建造者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...

  5. C++设计模式之建造者模式(三)

    4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...

  6. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  7. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

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

    原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...

  9. GOF23设计模式之建造者模式

    GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...

  10. java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

随机推荐

  1. centos下nginx配置

    转自  http://www.linuxidc.com/Linux/2016-09/134907.htm 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Wi ...

  2. div控制最小高度又自适高度

    div控制最小高度又自适高度我们在用div布局的时候经常会遇到这样的一种情况:我们需要设置一个div的高度,当里面的东西超过这个高度时,让这个容器自动被撑开,也就是自适应高度.当里面的信息很少时候,我 ...

  3. java 通过cookie判断是否登陆

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOEx ...

  4. json对象获取长度以及字符串和json对象的转换

    var arr = Object.keys(typeARR); var str = ''; var len = arr.length; for(var i = 0;i<len;i++){ str ...

  5. (五)Redux入门

    1 Redux概念简述 flux推出的时候有一些缺点.比如store可以存在多个,不是特别好用 于是逐渐进化为了redux. 2 Redux的工作流程 拿借书作举例: action creators是 ...

  6. 微信小程序 刷新页面

    一 , 当前页面刷新 第一种方式: //pages 获取到当前页码数 然后执行当前页的onLoad const pages = getCurrentPages() ] perpage.onLoad() ...

  7. CF17E Palisection(manacher)

    题意 给出一个长度为N的字符串S,问S中有多少个回文子串对(i,j)使得i,j在S中的位置相交?(N<=2*106) 题解 #include<iostream> #include&l ...

  8. C语言传参的类型匹配

    有一个这样的问题: 形参const char *p和实参char *c可以匹配 形参const char**p和实参char**c不可以匹配 注:argument和parameter:严格而言,par ...

  9. 2015 Multi-University Training Contest 2 hdu 5303 Delicious Apples

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  10. Unity 相机花式分屏

    花式分屏,顾名思义,可以实现各种不规则几何边界的分屏,是无法直接通过调整相机视口能达到效果的(只能实现矩形的分屏),例如斜对角分屏,几何图形分屏: 假设我们有两个相机,需要上面的斜对角分屏画面,和镜子 ...