Unity C# 设计模式(五)建造者模式
定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
组成部分:
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# 设计模式(五)建造者模式的更多相关文章
- C#设计模式(5)——建造者模式(Builder Pattern)
一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ...
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...
- Java设计模式之建造者模式(Builder)
前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...
- 【GOF23设计模式】建造者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...
- C++设计模式之建造者模式(三)
4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- Java 设计模式之建造者模式(四)
原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
- GOF23设计模式之建造者模式
GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...
- java设计模式3——建造者模式
java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...
随机推荐
- centos下nginx配置
转自 http://www.linuxidc.com/Linux/2016-09/134907.htm 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Wi ...
- div控制最小高度又自适高度
div控制最小高度又自适高度我们在用div布局的时候经常会遇到这样的一种情况:我们需要设置一个div的高度,当里面的东西超过这个高度时,让这个容器自动被撑开,也就是自适应高度.当里面的信息很少时候,我 ...
- java 通过cookie判断是否登陆
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOEx ...
- json对象获取长度以及字符串和json对象的转换
var arr = Object.keys(typeARR); var str = ''; var len = arr.length; for(var i = 0;i<len;i++){ str ...
- (五)Redux入门
1 Redux概念简述 flux推出的时候有一些缺点.比如store可以存在多个,不是特别好用 于是逐渐进化为了redux. 2 Redux的工作流程 拿借书作举例: action creators是 ...
- 微信小程序 刷新页面
一 , 当前页面刷新 第一种方式: //pages 获取到当前页码数 然后执行当前页的onLoad const pages = getCurrentPages() ] perpage.onLoad() ...
- CF17E Palisection(manacher)
题意 给出一个长度为N的字符串S,问S中有多少个回文子串对(i,j)使得i,j在S中的位置相交?(N<=2*106) 题解 #include<iostream> #include&l ...
- C语言传参的类型匹配
有一个这样的问题: 形参const char *p和实参char *c可以匹配 形参const char**p和实参char**c不可以匹配 注:argument和parameter:严格而言,par ...
- 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 ...
- Unity 相机花式分屏
花式分屏,顾名思义,可以实现各种不规则几何边界的分屏,是无法直接通过调整相机视口能达到效果的(只能实现矩形的分屏),例如斜对角分屏,几何图形分屏: 假设我们有两个相机,需要上面的斜对角分屏画面,和镜子 ...