【Unity3D与23种设计模式】建造者模式(Builder)

GoF中定义:

“将一个复杂的构建流程与它的对象表现分离出来,让相同的构建流程可以产生不同的对象行为表现。”

建造者模式可以分为两个步骤来实施:

1.将复杂的构建流程独立出来,并将整个流程分成几个步骤,其中的每一个步骤可以是一个功能组件的设置,也可以是参数的指定,并且在一个构建方法中,将这些步骤串接起来。

2.定义一个专门实现这些步骤的实现者,这些实现者知道每一个部分该如何完成,并且能接受参数来决定要产出的功能,但不知道整个组装流程是什么。

把握两个原则:“流程分析安排”和“功能分开实现”

public abstract class Builder
{
    public abstract void BuildPart1(Product theProduct);
    public abstract void BuildPart2(Product theProduct);
}

public class ConcreteBuilderA : Builder
{
    public override void BuildPart1(Product theProduct)
    {
        theProduct.AddPart("ConcreteBuilderA_Part1");
    }

    public override void BuildPart2(Product theProduct)
    {
        theProduct.AddPart("ConcreteBuilderA_Part2");
    }
}

public class ConcreteBuilderB : Builder
{
    public override void BuildPart1(Product theProduct)
    {
        theProduct.AddPart("ConcreteBuilderB_Part1");
    }

    public override void BuildPart2(Product theProduct)
    {
        theProduct.AddPart("ConcreteBuilderB_Part2");
    }
}

public class Product
{
    private List<string> m_Part = new List<string>();

    public Product() { }

    public void AddPart(string Part)
    {
        m_Part.Add(Part);
    }

    public void ShowProduct()
    {
        foreach (string Part in m_Part)
        {
            Debug.Log(Part);
        }
    }
}
//测试类
void UnitTest(){
    Director theDirector = new Director();
    Product theProduct = null;

    theDirector.Construct(new ConcreteBuilderA());
    theProduct = theDirector.GetResult();
    theProduct.ShowProduct();

    theDirector.Construct(new ConcreteBuilderB());
    theProduct = theDirector.GetResult();
    theProduct.ShowProduct();
}

文章整理自书籍《设计模式与游戏完美开发》 菜升达 著

时间: 2024-08-04 17:04:39

【Unity3D与23种设计模式】建造者模式(Builder)的相关文章

23种设计模式--建造者模式-Builder Pattern

一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建造者模式的具体体现,组装电脑反应到软件上就是一个复杂的对象,然后我们使用建造者模式的时候需要抽象一个建造类,抽象一个指挥者指挥具体实现的那个类,然后就是具体实现这个对象的类,这样就避免了每新创建一个不同的复杂对象就需要重新写一下这个类,这样就只要重写建造者就可以了,我们接下来就用组装电脑这个来说明一

23种设计模式----------建造者模式

建造者模式:像是模板方法模式的升级.也叫生成器模式.将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示.其实就是创建一大类的东西, 但是具体又有些差异. 在建造者模式中,一般有四个角色: 1,Product产品类. 该类一般实现了模板方法模式. 2,Builder抽象的建造者. 规范产品的组建,一般是由子类实现. 3,ConcreteBuilder具体的建造者. 实现抽象类定义的所有方法,并且可以返回一个组建好的具体对象. 4,Director导演类(一般是包涵多种具体产品

23种设计模式----------代理模式(二)

(上一篇)23种设计模式----------代理模式(一) 之前说了基本的代理模式和普通代理模式.接下来开始看下强制代理模式和虚拟代理模式 三,强制代理模式: 一般的代理模式都是通过代理类找到被代理的对象,从而调用被代理类中的方法(即完成被代理类中的任务). 而,强制代理模式则是先找到被代理类自己去完成事情,然后被代理类又将该做的事情转交到代理类中,让代理类来完成. 假如:你有事求助于某位名人. 你告诉名人说有事想请他帮忙,然后他说最近一段时间比较忙,要不你找我的经纪人来办吧. (本来找名人办事

23种设计模式----------代理模式(一)

代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者接口) IGamePlayer 2,代理类. 3,被代理类. 下面以游戏玩家代理为例. 一,先来看下最基本的代理模式. 代码如下: 主题接口: 1 package com.yemaozi.proxy.base; 2 3 //游戏玩家主题接口 4 public interface IGamePlaye

23种设计模式----------代理模式(三) 之 动态代理模式

(上一篇)种设计模式----------代理模式(二) 当然代理模式中,用的最广泛的,用的最多的是  动态代理模式. 动态代理:就是实现阶段不用关系代理是哪个,而在运行阶段指定具体哪个代理. 抽象接口的类图如下: --图来自设计模式之禅 所以动态代理模式要有一个InvocationHandler接口 和 GamePlayerIH实现类.其中 InvocationHandler是JD提供的动态代理接口,对被代理类的方法进行代理. 代码实现如下 抽象主题类或者接口: 1 package com.ye

设计模式—建造者模式(Builder)

title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对象创建型模式.我们获得一个对象的时候不是直接new这个对象出来,而是对其建造者进行属性设置,然后建造者在根据设置建造出各个对象出来.建造者模式又可以称为生成器模式. 模式结构 一个标准的建造者模式包含如下角色: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director

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

返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC何尝不是,我们的MVVM又何尝不是呢,我们做软件的,换肤是常有的事,其实换肤的实现不就是建造者模式最好的体现吗,呵呵. 定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 何时能用到它? 1 当创建复杂对象的算法应该独立于该对象的组成部分以

【Unity3D与23种设计模式】组合模式(Composite)

前段时间在忙一个新项目 博客好久没有更新了 GoF中定义: "将对象以树状结构组合,用以表现部分-全体的层次关系.组合模式让客户端在操作各个对象或组合时是一致的." 是一致的意思就是:能够对根节点调用的操作,同样能够在叶节点上使用 "分层式管理结构"一般也称为"树状结构" Unity中对于游戏对象的管理,也应用了树形结构的概念 让游戏对象之间可以被当成子对象或设置为父对象的方式来连接两个对象 public abstract class IComp

【Unity3D与23种设计模式】享元模式(Flyweight)

GoF中定义: "使用共享的方式,让一大群小规模对象能更有效地运行" 享元模式一般应用在游戏角色属性设置上 游戏策划需要通过"公式计算"或者"实际测试"等方式找出最佳的游戏属性 因此,在游戏系统中建立一个管理方式来建立和存储属性信息就显得尤为重要 对象中那些只能读取不能写入的共享部分被称为"内在状态" 如:最大生命(MaxHP).移动速度(MoveSpeed)等属性 还有不能被共享的部分,被称为"外部状态"