设计模式---建造者模式(DesignPattern_Builder)

  1. 云栖社区>
  2. 博客>
  3. 正文

设计模式---建造者模式(DesignPattern_Builder)

su9257_海澜 2017-08-30 09:34:00 浏览272
展开阅读全文

DesignPattern_Builder

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。

工程GitHub

BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。

建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
using UnityEngine;
using System.Collections.Generic;

namespace DesignPattern_Builder
{
    // 含有复杂零件的产品
    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()
        {
            Debug.Log("ShowProduct Functions:");
            foreach(string Part in m_Part)
                Debug.Log(Part);
        }
    }

    // 生成一个产品的抽象类
    public abstract class Builder
    {
        public abstract void BuildPart1(Product theProduct);
        public abstract void BuildPart2(Product theProduct);
    }

    // 组装A产品
    public class ConcreteBuilderA : Builder
    {
        public override void BuildPart1(Product theProduct)
        {
            theProduct.AddPart( "ConcreteBuilderA_Part1");
        }
        public override void BuildPart2(Product theProduct)
        {
            theProduct.AddPart( "ConcreteBuilderA_Part2");
        }
    }

    // 组装B产品
    public class ConcreteBuilderB : Builder
    {
        public override void BuildPart1(Product theProduct)
        {
            theProduct.AddPart( "ConcreteBuilderB_Part1");
        }
        public override void BuildPart2(Product theProduct)
        {
            theProduct.AddPart( "ConcreteBuilderB_Part2");
        }
    }

    // 建造管理 就是理由Builder来建造一个产品
    public class Director
    {
        private Product m_Product;

        public Director(){}

        // 建造
        public void Construct(Builder theBuilder)
        {
            // 开始组装产品
            m_Product = new Product();
            theBuilder.BuildPart1( m_Product );
            theBuilder.BuildPart2( m_Product );
        }

        // 取得成品
        public Product GetResult()
        {
            return m_Product;
        }
    }
}
using UnityEngine;
using System.Collections;
using DesignPattern_Builder;

public class BuilderTest : MonoBehaviour
{

    void Start()
    {
        UnitTest();
    }

    void UnitTest()
    {
        // 建造
        Director theDirectoir = new Director();
        Product theProduct = null;

        // 使用BuilderA建立
        theDirectoir.Construct(new ConcreteBuilderA());
        theProduct = theDirectoir.GetResult();
        theProduct.ShowProduct();

        // 使用BuilderB建立
        theDirectoir.Construct(new ConcreteBuilderB());
        theProduct = theDirectoir.GetResult();
        theProduct.ShowProduct();
    }
}

网友评论

登录后评论
0/500
评论
su9257_海澜
+ 关注