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(); }
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著