• 建造者模式


    建造者模式

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

    组成角色
    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
  • 相关阅读:
    Java+SpringBoot+Vue:瑜伽馆管理的黄金组合
    numpy函数总结
    代码随想录二刷day48
    PXE高效批量网络装机
    【附源码】Python计算机毕业设计税务综合信息平台
    Python学习第九篇:zipfile 库操作压缩包
    自动生成VGG图像注释文件
    cassandra节点增删磁盘
    4.springboot中整合Mybatis
    医学图像处理中的数据读写
  • 原文地址:https://blog.csdn.net/baidu_24565387/article/details/126656915