zoukankan      html  css  js  c++  java
  • 设计模式之十一(建造者模式)

    前言

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

    结构图

     

    Builder是为创建一个Product对象的各个部件指定的抽象接口。

    ConcreteBuilder是具体的建造者,实现Builder接口,构造和装配各个部件。可以有多个不同的具体的建造者。

    Product具体产品角色

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

    代码实现

     首先来看一下产品类

        public class Product
        {
            List<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);
                }
            }
        }

    第一个Add方法主要是为产品添加部件

    第二个Show就是展示产品所拥有的部件

    Builder类---抽象建造类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。

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

    ConcreteBuilder1---具体建造者类

        public 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----具体建造者类

        public 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---指挥者类

        public class Director
        {
            public void Constrct(Builder builder)
            {
                builder.BuildPartA();
                builder.BuildPartB();
            }
        }

    客户端代码,客户端不需知道具体的建造过程。

        class Program
        {
            static void Main(string[] args)
            {
                Director director = new Director();
                Builder b1 = new ConcreteBuilder1();
                Builder b2 = new ConcreteBuilder2();
                director.Constrct(b1);
                Product p1 = b1.GetResult();
                p1.Show();
    
                director.Constrct(b2);
                Product p2 = b2.GetResult();
                p2.Show();
    
                Console.ReadLine();
            }
        }

    最终运行效果

     

    总结

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

    建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的, 所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造着就可以了。

  • 相关阅读:
    Spring中@Autowired注解与自动装配
    Nginx教程(一)-全面认知
    hadoop-mapreduce 详解
    python with hadoop
    大数据架构与技术选型
    hadoop-集群搭建
    虚拟机Vmware-网络配置
    linux 忘记密码
    高效编程之 小技巧归纳
    kafka 教程(四)-原理进阶
  • 原文地址:https://www.cnblogs.com/aehyok/p/3364414.html
Copyright © 2011-2022 走看看