• 建造者模式


    建造者模式

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

    组成角色
    Builder:抽象建造者 创建一个产品Product对象的各个部件指定抽象接口
    ConcreteBuilder:具体建造者 实现Builder接口 实现具体构造与装配方法 定义创建的复杂对象
    Product:产品 包含多个组成部件
    Director:指挥者 负责安排复杂对象的建造次序

    builder
    Product
    -PartA:
    -PartB:
    -PartC:
    Builder
    +BuildPartA()
    +BuildPartB()
    +BuildPartC()
    +GetResult()
    ConcreteBuilder
    +BuildPartA()
    +BuildPartB()
    +BuildPartC()
    +GetResult()
    Director
    -builder:Builder
    +Construct()

    示例代码

        public  class Product
        {
            private string partA;
            private string partB;
            private string partC;
            public string PartA
            {
                get { return partA; }
                set
                { 
                    partA = value;
                }
            }
    
            public string PartB
            {
                get  { return partB; }
                set
                {
                    partB = value;
                }
            }
    
            public string PartC
            {
                get  { return partC; }
                set
                {
                    partC = value;
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
        public abstract class Builder
        {
            //创建产品对象
            protected Product product = new Product();
            public abstract void BuildPartA();
            public abstract void BuildPartB();
            public abstract void BuildPartC();
    
            public Product GetResult()
            {
                return product;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
        class ConcreteBuilder1 : Builder
        {
            public override void BuildPartA()
            {
               product.PartA="A1";
            }
    
            public override void BuildPartB()
            {
                product.PartB = "B1";
            }
    
            public override void BuildPartC()
            {
                product.PartC = "C1";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
        class Director
        {
            private Builder builder;
            public Director(Builder builder)
            {
                this.builder = builder;
            }
    
            public void SetBuilder(Builder builder)
            {
                this.builder = builder;
            }
            //产品构建与组装方法
            public Product Construct()
            {
                builder.BuildPartA();
                builder.BuildPartB();
                builder.BuildPartC();
                return builder.GetResult(); 
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    建造者调用

                Builder builder = new ConcreteBuilder1();
                Director director = new Director(builder);
                Product product = director.Construct();
    
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    如何使用Node.js快速创建HTTP服务器并实现公网访问本地Server
    一文详解归并排序
    Java“白皮书”的关键术语
    新手学编程前端好还是后端?
    设计模式之单例设计模式
    【无标题】
    【论文 01】《Attention is all you need》
    【14】c++11新特性 —>共享智能指针
    完成原型设计的五个步骤
    SAML2.0 笔记(二)
  • 原文地址:https://blog.csdn.net/baidu_24565387/article/details/126656915