zoukankan      html  css  js  c++  java
  • 设计模式のBuilderPattern(创建者模式)----创建模式

    一、产生背景

      要组装一台电脑,它的组装过程基本是不变的,都可以由主板、CPU、内存等按照某个稳定方式组合而成。然而主板、CPU、内存等零件本身都是可能多变的。将内存等这种易变的零件与电脑的其他部件分离,实现解耦合,则可以轻松实现电脑不断升级。

      主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

    二、通常做法

      建造者:创建和提供实例,

      导演:管理建造出来的实例的依赖关系。

    三、实例

    1、创建者

        public abstract class Builder
        {
            public abstract void BuildPartA();
            public abstract void BuildPartB();
            public abstract Product GetResult();
        }

    2、实际创建者

     public class ConcreteBuilder1 : Builder
        {
            private Product _product = new Product();
    
            public override void BuildPartA()
            {
                _product.Add("PartA");
            }
    
            public override void BuildPartB()
            {
                _product.Add("PartB");
            }
    
            public override Product GetResult()
            {
                return _product;
            }
        }
    
        public class ConcreteBuilder2 : Builder
        {
            private Product _product = new Product();
    
            public override void BuildPartA()
            {
                _product.Add("PartX");
            }
    
            public override void BuildPartB()
            {
                _product.Add("PartY");
            }
    
            public override Product GetResult()
            {
                return _product;
            }
        }

    3、导演

        public class Director
        {
            /// <summary>
            /// Builder uses a complex series of steps
            /// </summary>
            public void Construct(Builder builder)
            {
                builder.BuildPartA();
                builder.BuildPartB();
            }
        }

    4、产品

        public class Product
        {
            private List<string> _parts = new List<string>();
    
            public void Add(string part)
            {
                _parts.Add(part);
            }
    
            public void Show()
            {
                Console.WriteLine("Product Parts");
                foreach (string part in _parts)
                {
                    Console.WriteLine(part);
                }
            }
        }

    5、客户端调用

        class Program
        {
            static void Main(string[] args)
            {
                // Create director and builders
                Director director = new Director();
    
                Builder b1 = new ConcreteBuilder1();
                Builder b2 = new ConcreteBuilder2();
    
                // Construct two products
                director.Construct(b1);
                Product p1 = b1.GetResult();
                p1.Show();
    
                director.Construct(b2);
                Product p2 = b2.GetResult();
                p2.Show();
    
                Console.ReadLine();
            }
        }

    四、设计模式分析

    优点: 1、建造者独立,易扩展。 2、便于控制细节风险。

    缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。

    点击下载源码

  • 相关阅读:
    angularjs MVC、模块化、依赖注入详解
    SpringBoot2.0整合Redission
    SpringBoot2.0整合SpringSecurity实现自定义表单登录
    SpringBoot2.0整合SpringSecurity实现WEB JWT认证
    基于Redis实现消息队列的几种方式
    函数初识
    noip200204过河卒
    邮票问题
    noip200205均分纸牌
    废品回收
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/8125696.html
Copyright © 2011-2022 走看看