zoukankan      html  css  js  c++  java
  • 设计模式-生成器模式

    前言

    点击查看:设计模式系列 

    生成器模式(建造者模式/builder)

    定义:将一个复杂的对象,分成多分,使同样的构建过程,能有不同的表示,这样的设计模式被称为建造者模式。

    举例说明:

    李嘉诚的遗嘱执行:

    财产(产品角色):李嘉诚拥有众多复杂的财产框架,这里以现金与物品入例。

    遗嘱(建造者):相当于建造者,分配现金与物品。

    具体遗嘱(具体建造者):1.给大儿子的财产分配,2,给小儿子的财产分配。

    律师(指导者角色):按照具体的遗嘱指令分配财产。

    例子类图:

    庞大的财产结构代码:

     // 财产(复杂的财产)
        class CaiChan
        {
            //现金
            public  float money { get; set; }
            // 物品
            public string product { get; set; }   
    
            //展示老爸留给他的遗产
            public void Show()
            {
                Console.WriteLine(" 我升仙以后,给你现金:"+money+"元,给你的物品是:"+product);          
            }
        }

    遗嘱关于遗产的分配,建造者,具体建造者

     // 爸爸分配财产(建造者)
        abstract class DidCaiChan
        {
            //分钱
            abstract public void giveMoney();
            //分传家宝
            abstract public void giveProduct();        
            abstract public CaiChan getCaiChan();
        }
    
        // 大哥继承爸爸的财产(具体建造者)
        class OlderBrotherCaiChan : DidCaiChan
        {
            // 财产
            private CaiChan cc;
    
            //留给的现金
            override public void giveMoney()
            {
                cc = new CaiChan();
                cc.money = (float)0.5;
            }
            //留给的传家宝
            override public void giveProduct()
            {
                cc.product = "小板凳一个";
            }
            override public CaiChan getCaiChan()
            {
                return cc;
            }
        }
    
        // 弟弟继承爸爸的财产(具体建造者)
        class LittleBrotherCaiChan : DidCaiChan
        {
            // 财产
            private CaiChan cc;
    
            //留给的现金
            override public void giveMoney()
            {
                cc = new CaiChan();
                cc.money = (float)0.25;
            }
            //留给的传家宝
            override public void giveProduct()
            {
                cc.product = "小桌子一张";
            }
    
            override public CaiChan getCaiChan()
            {
                return cc;
            }
        }

    律师入场,依据遗嘱分配财产(指导者角色)

        //律师(指导者角色)
        class LvShi
        {
            // 安按照遗书分配
            public void Give(DidCaiChan builder)
            {
                builder.giveMoney();
                builder.giveProduct();
            }
        }

    分配遗产现场,客户端

                //律师入场
                LvShi ls = new LvShi();
                //宣读,关于哥哥和弟弟的遗产分配译文
                DidCaiChan ge = new OlderBrotherCaiChan();
                DidCaiChan di = new LittleBrotherCaiChan();
    
                //分配财产开始
    
                Console.WriteLine("律师宣读父亲给哥哥的遗言,并分配财产:");
                ls.Give(ge);
                ge.getCaiChan().Show();
    
                //点任意键,给弟弟分配财产
                Console.ReadKey();
    
                Console.WriteLine("律师宣读父亲给弟弟的遗言,并分配财产:");
                ls.Give(di);
                di.getCaiChan().Show();
    
                Console.ReadKey();

    遗产分配完美结束,关于生成器模式(建造者模式)总结

    以下情况应当使用建造者模式:

    1、 产品对象的内部结构需要有不同的展示。
    2、 不同的展示对象属性依赖与同一个产品对象,产品对象内部顺序可自行调整使用。
    3、 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

    使用建造者模式主要有以下效果:

    1、 建造模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
    2、 每个特定的建造者都独立于其它建造者和程序的其余部分,这提高拉模块化程度,并使得添加其建造者变的灵活简单。
    3、 因为每一个建造者都是根据数据来逐步构造出最终的产品的,因此对建造者构造的每个最终产品从头到尾有更好的控制能力。 

    欢迎加入博客左上方群,交流探讨,设计模式,数据库,c#.net,数据结构。

  • 相关阅读:
    asp.net mvc让我告诉你请求从哪里来
    我也要学iOS逆向工程--函数
    我也要学iOS逆向工程--全局变量
    我也要学C语言-第十九章:命令行参数
    使用docker搭建nfs实现容器间共享文件
    Golang控制goroutine的启动与关闭
    我是如何用Go语言搭建自己的博客的
    让我们一起Go(十三)
    让我们一起Go(十二)
    让我们一起Go(十一)
  • 原文地址:https://www.cnblogs.com/knowledgesea/p/3927310.html
Copyright © 2011-2022 走看看