1.什么是创建者模式(构建者模式)?
创建者模式类似于一个步骤基本固定,但是每个步骤中的具体形式却又可以变化的这类对象的创建。其中,创建者负责构建一个对象的各个部分,并且完成组装的过程。如,做饭过程
2.意图是什么?
将类的构建逻辑转移到类的实例化外部。
3.创建者模式解读
1)类图
2)角色分析
Product:所需要创建的对象类,由具体环境确定;
IBuild:创建工具接口/抽象类,包括对象组装所需的所有步骤的接口声明;
Build:创建工具具体实现类;Product对象作为其成员;
Directr:引导者,来引导对象的具体组装过程;而具体对象的创建还是靠对象本身提供的相应方法,Builder只是调用对象的方法完成组装步骤;
Client:最终使用者。
4.创建者模式举例
1)定义产品类
class Product { List <string> parts = new List <string> (); public void Add(string part) { parts.Add(part); } public void Display() { Console.WriteLine("\nProduct Parts -------"); foreach (string part in parts) Console.Write(part); Console.WriteLine(); } }
interface IBuilder { void BuildPartA(); void BuildPartB(); Product GetResult(); }
class Builder1 : IBuilder { private Product product = new Product(); public void BuildPartA() { product.Add("PartA "); } public void BuildPartB() { product.Add("PartB "); } public Product GetResult() { return product; } } class Builder2 : IBuilder { private Product product = new Product(); public void BuildPartA() { product.Add("PartX "); } public void BuildPartB() { product.Add("PartY "); } public Product GetResult() { return product; } }
class Director { // Builder uses a complex series of steps public void Construct(IBuilder builder) { builder.BuildPartA(); builder.BuildPartB(); builder.BuildPartB(); } }
public static void Main() { // Create one director and two builders Director director = new Director(); IBuilder b1 = new Builder1(); IBuilder b2 = new Builder2(); // Construct two products director.Construct(b1); Product p1 = b1.GetResult(); p1.Display(); director.Construct(b2); Product p2 = b2.GetResult(); p2.Display(); Console.ReadKey(); }
2)具有依赖关系或者组合关系的对象的创建尤为适合。
3)通常用在在构建解释器和用户界面上。