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();
}
}
2)定义创建工具接口
interface IBuilder {
void BuildPartA();
void BuildPartB();
Product GetResult();
}
3)定义创建工具具体实现类
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;
}
}
4)定义引导者类
class Director {
// Builder uses a complex series of steps
public void Construct(IBuilder builder) {
builder.BuildPartA();
builder.BuildPartB();
builder.BuildPartB();
}
}
5)定义消费者类
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();
}
1)构建者构建类对象的过程通常是分步骤的,这使得该模式通常被应用于解析文本以创建对象的场景。
2)具有依赖关系或者组合关系的对象的创建尤为适合。
3)通常用在在构建解释器和用户界面上。