码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-07-25 10:28:58      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:build   void   23种设计模式   foreach   分离   指定   ack   unittest   erb   

 

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();
}

 

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

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

标签:build   void   23种设计模式   foreach   分离   指定   ack   unittest   erb   

原文地址:http://www.cnblogs.com/fws94/p/7232101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!