建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程可以表示不通的表示;
=== 画一个小人,共有属性有头、身体、四肢。但小人有胖有瘦,有高有矮。因此,可以定义一个抽象类表示人,类中包括画头、身体、四肢的共有方法。而在子类重写这些方法实现不同的细节;
class Program { static void Main(string[] args) {
//指挥者 Director director = new Director();
//建造1 Builder b1 = new ConcreteBuilder1();
//建造2 Builder b2 = new ConcreteBuilder2(); //指挥建造1 director.Construct(b1); Product p1 = b1.GetResult(); p1.Show(); director.Construct(b2); Product p2 = b2.GetResult(); p2.Show(); Console.Read(); } } //指挥者 用来指挥建造过程 class Director { public void Construct(Builder builder) { builder.BuildPartA(); builder.BuildPartB(); } } //抽象建造者类 确定产品由两个部件组成 并声明一个得到产品结果的方法 abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product GetResult(); } //具体建造者类 class ConcreteBuilder1 : Builder { private Product product = new Product(); public override void BuildPartA() { product.Add("部件A"); } public override void BuildPartB() { product.Add("部件B"); } public override Product GetResult() { return product; } } //具体建造者类 class ConcreteBuilder2 : Builder { private Product product = new Product(); public override void BuildPartA() { product.Add("部件X"); } public override void BuildPartB() { product.Add("部件Y"); } public override Product GetResult() { return product; } } //产品类 class Product { IList<string> parts = new List<string>(); //添加部件 public void Add(string part) { parts.Add(part); } //列举组成部件 public void Show() { Console.WriteLine(" 产品 创建 ----"); foreach (string part in parts) { Console.WriteLine(part); } } } 结果: 产品 创建 ---- 部件A 部件B 产品 创建 ---- 部件X 部件Y
# 建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。