• 建造者模式


    1、个人理解:首先我们要有一件产品,这个产品由多个部件组成;然后再有一个抽象建造者,将建造这个产品的部件都写成抽象方法,继承它的子类会去重写这些方法。最后我们要有一个指挥者类,去封装调用这些方法,也就是建造的过程。

    2、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    3.代码实现

    1)product类,产品类,由多个部件构成。

     1 class Product
     2     {
     3         IList<string> parts = new List<string>();
     4 
     5         public void Add(string part)
     6         {
     7             parts.Add(part);
     8         }
     9         //列举所有的产品部件
    10         public void Show()
    11         { 
    12            foreach(string part in parts){
    13                Console.WriteLine(part);
    14            }
    15         }
    16     }

    2)抽象的建造者

    1 abstract class Builder
    2     {
    3         //建造产品必须的两个部件
    4         public abstract void BuildPartA();
    5         public abstract void BuildPartB();
    6 
    7         public abstract Product GetResult();
    8 
    9     }

    3)具体的建造者

     1 class ConcreteBuilder1 : Builder
     2     {
     3        private Product p = new Product();
     4         public override void BuildPartA()
     5         {
     6             p.Add("部件A");
     7         }
     8 
     9         public override void BuildPartB()
    10         {
    11             p.Add("部件B");
    12         }
    13 
    14         public override Product GetResult()
    15         {
    16             return p;
    17         }
    18     }
    19     class ConcreteBuilder2 : Builder
    20     {
    21         private Product p = new Product();
    22         public override void BuildPartA()
    23         {
    24             p.Add("部件X");
    25         }
    26 
    27         public override void BuildPartB()
    28         {
    29             p.Add("部件Y");
    30         }
    31 
    32         public override Product GetResult()
    33         {
    34             return p;
    35         }
    36     }

    4)指挥者类,也就是用来指挥建造过程

    1 class Director
    2     {
    3         //封装了建造的过程
    4         public void Construct(Builder builder)
    5         {
    6             builder.BuildPartA();
    7             builder.BuildPartB();
    8         }
    9     }

    5)客户端代码

     1 static void Main(string[] args)
     2         {
     3             //创建一个指挥者
     4             Director dt = new Director();
     5             //创建具体的产品
     6             ConcreteBuilder1 cb1 = new ConcreteBuilder1();
     7             //指挥产品的建造
     8             dt.Construct(cb1);
     9             //得到产品
    10             Product p1 = cb1.GetResult();
    11             //展示产品的部件
    12             p1.Show();
    13 
    14             Console.ReadKey();
    15         }
  • 相关阅读:
    IOS10.8.2安装
    如何读本地资源图片
    SqlServer2000日志文件过大问题处理
    xcode 4.5.1 免证书开发 破解
    C#生成注册码
    去掉Html标签方法
    数组处理
    返回代码
    Javascript图像处理——图像金字塔
    Javascript图像处理——图像形态学
  • 原文地址:https://www.cnblogs.com/zhengwei-cq/p/6741968.html
Copyright © 2020-2023  润新知