• 建造者模式


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

    从建造者模式的定义来看,肯定是一头雾水,说的都是什么跟什么呀!举个小例来理解下:当我们来实现一个画画的功能,要求画瘦的人和胖的人。画的过程是稳定的,即:头、胳膊、身体、腿都是必须的。而画的具体实现是不一样的,例如:头大、肚子大、腿长等。这时再去理解建造者模式的定义就简单多了。

    UML图:

    Builder抽象类中定义各个部分的方法的抽象方法(例:定义了画胳膊、画头、画腿等方法)。
    ConcreteBuilder类是各种不一样具体表示,它具体实现了Builder中的方法,并且返回一个结果。(例:实现了具体画怎样的头、胳膊、腿等,并返回构造的这个人)
    product类是具体产品,即:要建造的产品。例:头、胳膊、腿等都是要建造人

    代码:

        //抽象建造者类
        public  abstract class Builder
        {
            public abstract void Head();
            public abstract void Body();
            public abstract void Leg();
        }
    抽象建造者类:Builder
        //具体建造者类
        class ConcreteBuilderA:Builder
        {
            private Person person = new Person();
            public override void Head()
            {
                //do something
                person.Head = "A式头";
            }
    
            public override void Body()
            {
                //do something
                person.Body = "A式身体";
            }
    
            public override void Leg()
            {
               //do something
                person.Leg = "A式腿";
            }
            public Person GetResult()
            {
                return person;
            }
        }
    具体建造者类:ConcreteBuilderA
        //具体建造者类
        class ConcreteBuilderB:Builder
        {
            private Person person = new Person();
    
            public override void Head()
            {
                //do something
                person.Head = "B式头";
            }
    
            public override void Body()
            {
                //do something
                person.Body = "B式身体";
            }
    
            public override void Leg()
            {
               //do something
                person.Leg = "B式腿";
            }
            public Person GetResult()
            {
                return person;
            }
    具体建造者类:ConcreteBuilderB
        //产品类
        class Person
        {
            public Object Head { set; get; }
            public Object Body { set; get; }
            public Object Leg { set; get; }
        }
    产品类:Person
        //指挥者类
        class Director
        {
            public void Construct(Builder builder)
            {
                builder.Head();
                builder.Body();
            }
        }
    指挥者类:Director

    执行:

            static void Main(string[] args)
            {
                Director director = new Director();
                ConcreteBuilderA a = new ConcreteBuilderA();
                director.Construct(a);
    
                Object p = a.GetResult();
            }

      上述执行代码中,首先创建执行者类,再创建一个具体建造者类,然后由执行者类调用Construct方法去执行建造。而最后通过具体建造者类的GetResult方法获得了建造的结果。

  • 相关阅读:
    聊聊 归一化和标准化
    感觉对自己比较有意义的文章收录
    Quartz.Net 使用心得(一)
    Quartz.Net 使用心得(二)
    HttpClient异步请求Post传递Json
    今天我也用上了阿里云的Centos
    WebApi传参总动员(一)
    半监督学习
    特征选择
    深度学习图像分割——Unet网络
  • 原文地址:https://www.cnblogs.com/wupeiqi/p/3355216.html
Copyright © 2020-2023  润新知