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

    建造者模式

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

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

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

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


    建造者模式结构演示

    产品类: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
  • 相关阅读:
    Bootstrap3基础 thumbnail 圆角类型的div块
    Bootstrap3基础 text-muted/success... 辅助类样式 情景文本颜色
    Bootstrap3基础 text-right/left/center 设置标题右对齐、左对齐、居中
    Bootstrap3基础 table-striped 表格实现隔行换色(浅灰色与白色交替)
    Bootstrap3基础 table-condensed 表格中的单元格紧凑一些
    Bootstrap3基础 table-responsive 响应式表格
    Bootstrap3基础 table-bordered/hover 表格加外边框和鼠标悬停对应行的背景色加深
    Bootstrap3基础 page-header 标题下加分割线
    iOS Swift编程语言
    【强烈推荐】XCODE的插件之王
  • 原文地址:https://www.cnblogs.com/errornull/p/10053607.html
Copyright © 2011-2022 走看看