zoukankan      html  css  js  c++  java
  • 【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();
    }

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

  • 相关阅读:
    OpenCASCADE 平面与球面求交
    OpenCASCADE 平面求交
    为 Taro 的小程序 TS 模板加点料
    async-validator 的中文文档翻译
    JS中的与冒号的作用、箭头函数相关的一道题
    为Electron 安装 vue-devtool等扩展
    小程序做一个能够左右滑动切换的多tab页面
    使用sourceMap文件定位小程序错误信息
    手写一个promise
    通过页面预加载(preload)提升小程序的响应速度
  • 原文地址:https://www.cnblogs.com/fws94/p/7232101.html
Copyright © 2011-2022 走看看