• 大话设计模式-建造者模式


    建造者模式

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

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

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

    建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。


    建造者模式结构演示

    产品类:Product

    Product是具体的产品角色,由多个部件组成

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

    建造者抽象类:Builder

    是建造一个产品的各个部分的抽象类,规定实现一个产品必须要实现的部分。由确定产品的两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。

    abstract class Builder{
        public abstract void BuilderPartA();
        public abstract void BuilderPartB();
        public abstract Product GetResult();
    }

    具体建造者类:ConcreteBuilder

    具体建造者类是对抽象的具体实现,基于同样要求实现的方法实现不同的内容,建造两个具体的部件。

    class ConcreteBuilderA : Builder{
        private Product product = new Product();
        public override void BuilderPartA() => product.Add("部件A");
        public override void BuilderPartB() => product.Add("部件B");
        public override Product GetResult() => product;
    }
    class ConcreteBuilderB : Builder{
        private Product product = new Product();
        public override void BuilderPartA() => product.Add("部件X");
        public override void BuilderPartB() => product.Add("部件Y");
        public override Product GetResult() => product;
    }

    指挥者类:Director

    指挥者类根据用户的需求来创建产品。其中指挥建造过程。

    class Director{
        public void Construct(Builder builder){
            builder.BuilderPartA();
            builder.BuilderPartB();
        }
    }

    测试类:Program

    客户端不需要知道具体的建造过程。

    //Main方法
    Director director = new Director();
    Builder b1 = new ConcreteBuilderA();
    Builder b2 = new ConcreteBuilderB();
    director.Construct(b1);
    Product p1 = b1.GetResult();
    p1.Show();
    director.Construct(b2);
    Product p2 = b2.GetResult();
    p2.Show();
    //测试结果
    产品创建
    部件A
    部件B
    产品创建
    部件X
    部件Y
  • 相关阅读:
    Swift入门篇-Hello World
    Swift入门篇-swift简介
    Minecraft 插件 world edit 的cs 命令
    搭建本地MAVEN NEXUS 服务
    MC java 远程调试 plugin 开发
    企业内部从零开始安装docker hadoop 提纲
    javascript 命令方式 测试例子
    ca des key crt scr
    JSF 抽象和实现例子 (函数和属性)
    form 上传 html 代码
  • 原文地址:https://www.cnblogs.com/errornull/p/10053607.html
Copyright © 2020-2023  润新知