zoukankan      html  css  js  c++  java
  • 【大话设计模式】——建造者模式

    1.定义

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

    2.类型

           创建型模式

    3.类图

                            

           四种元素:

           Builder是一个抽象的建造者接口,为创建一个Product对象的各个部件指定的抽象接口。一般至少会有两个抽象方法,一个用来建造产品;一个是用来返回产品。

           ConcreteBuilder是具体建造者,实现Builder接口,构造和装配各个部件。具体来说一般是两项任务:组建产品;返回组建好的产品。

           Product是构建的具体产品,一般是一个较复杂的对象,也就是创建对象的过程比较复杂,需要比较多的代码。

           Director是构建一个使用Builder接口的对象。

    4.代码

        //product类
        class Product
        {
            IList<string> parts = new List<string>();
            public void Add(string part)  //添加产品部件
            {
                parts.Add(part);
    
            }
            public void Show()
            {
                Console.WriteLine("/n产品 创建----");
                foreach (string part in parts)
                {
                    Console.WriteLine(part);
                }
            }
    
        }
        //buider类
        abstract class Builder
        {
            public abstract void BuildPartA();
            public abstract void BuildPartB();
            public abstract Product GetResult();
        }
    
        //ConcreteBuilder1类
        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;
            }
            
        }
    
        //ConcreteBuilder2类
        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;
            }
        }
        //Director类
        class Director
        {
            public void Construct(Builder builder)
            {
                builder.BuildPartA();
                builder.BuildPartB();
            }
        }
     //客户端代码
                Director director = new Director();
                Builder b1 = new ConcreteBuilder1();
                Builder b2 = new ConcreteBuilder2();
    
                director.Construct(b1 );
                Product p1 = b1.GetResult();
                p1.Show();
    
                director.Construct(b2);
                Product p2 = b1.GetResult();
                p2.Show();
    
                Console.Read();

     

    5.建造者模式的优点

             1、建造者模式不仅内聚性强,而且大大降低耦合度。建造者模式将一个复杂对象的构建与表示分离,并且使得构建代码与表示代码分开,用同样的构建过程创建不同的产品。

             2、建造者模式灵活,扩展性强。如果增加新的需求,通过再定义一个建造者类就可以完成,不需要修改原来的代码。

    6.建造者模式的适用范围

            建造者模式主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

     

  • 相关阅读:
    阻止事件冒泡
    移动端开发
    angular6 管道多参数传输 Pipe
    在div上添加小三角
    angular6 使用@Input() @Output()
    angular6 想要获取页面某些事件 如 点击 window宽高等等
    如何将项目添加到git上
    使用vue-cli 搭建element-admin后台
    bootstrap4 常用样式类名 (供自己参考)
    键盘按下 keyCode 的值
  • 原文地址:https://www.cnblogs.com/ainima/p/6331055.html
Copyright © 2011-2022 走看看