• C#建造者模式


      /// <summary>
      /// 电脑类
      /// </summary>  
      public class Computer
      {
        //电脑组件集合
        private IList<string> parts = new List<string>();

        //把单个组件添加到电脑组件集合中
        public void Add(string part) {
          parts.Add(part);
        }

        //
        public void Show() {
          Console.WriteLine("电脑开始在组装.....");
          foreach (var part in parts)
          {
            Console.WriteLine("组件"+part+"已经装好");
          }
          Console.WriteLine("电脑组装好了");
        }
      }

      /// <summary>
      /// 抽象建造者
      /// </summary>
      public abstract class Builder
      {

        //装CPU
        public abstract void BuilderPartCUP();
        //装主板

        public abstract void BuilderPartMainBoard();
        //获得组装好的电脑

        public abstract Computer GetComputer();
      }

      //组装人1

      public class ConcreteBuilder1 : Builder
      {
        Computer com = new Computer();
        public override void BuilderPartCUP()
        {
          com.Add("CPU1");
        }

        public override void BuilderPartMainBoard()
        {
          com.Add("Main Board1");
        }

        public override Computer GetComputer()
        {
          return com;
        }
      }

      //组装人2

      public class ConcreteBuilder2 : Builder
      {
        Computer com = new Computer();
        public override void BuilderPartCUP()
        {
          com.Add("CPU2");
        }

        public override void BuilderPartMainBoard()
        {
          com.Add("Main Board2");
        }

        public override Computer GetComputer()
        {
          return com;
        }
      }

      //指挥创建

      public class Director {
        public void Construct(Builder builder) {
          builder.BuilderPartCUP();
          builder.BuilderPartMainBoard();
        }
      }

      调用: 

      var dir = new Director();
      Builder con1 = new ConcreteBuilder1();
      Builder con2 = new ConcreteBuilder2();

      dir.Construct(con1);
      var com1 = con1.GetComputer();
      com1.Show();

      dir.Construct(con2);
      var com2 = con2.GetComputer();
      com2.Show();

      

      建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

      建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度,

      介绍完了建造者模式的具体实现之后,让我们总结下建造模式的实现要点:

      1 在建造者模式中,指挥者是直接与客户端打交道的,指挥者将客户端创建产品的请求划分为对各个部件的建造请求,再将这些请求委派到具体建造者角色,具体建造者角色是完成具体产品的构建工作的,却不为客户所知道。

      2 建造者模式主要用于“分步骤来构建一个复杂的对象”,其中“分步骤”是一个固定的组合过程,而复杂对象的各个部分是经常变化的(也就是说电脑的内部组件是经常变化的,这里指的的变化如硬盘的大小变了,CPU由单核变双核等)。

      3 产品不需要抽象类,由于建造模式的创建出来的最终产品可能差异很大,所以不大可能提炼出一个抽象产品类。

      4 在前面文章中介绍的抽象工厂模式解决了“系列产品”的需求变化,而建造者模式解决的是 “产品部分” 的需要变化。

      5 由于建造者隐藏了具体产品的组装过程,所以要改变一个产品的内部表示,只需要再实现一个具体的建造者就可以了,从而能很好地应对产品组成组件的需求变化。

      转:http://www.cnblogs.com/zhili/p/BuilderPattern.html

  • 相关阅读:
    朴英敏: 用crash工具分析Linux内核死锁的一次实战【转】
    ext3,ext4,xfs和btrfs文件系统性能对比【转】
    STM32MP157——Remoteproc和RPMsg【转】
    使用edac工具来检测服务器内存故障.【转】
    面试题-python 什么是生成器(generator)?
    面试题-python 什么是迭代器(Iterator)?
    面试题-python 浅拷贝和深拷贝(copy模块)
    selenium+python自动化104-如何获取隐藏元素text文本
    面试题-websocket 接口如何测试?
    jmeter压测学习47-发soap请求测试webservice接口
  • 原文地址:https://www.cnblogs.com/zwyAndDong/p/9773261.html
Copyright © 2020-2023  润新知