前言
点击查看:设计模式系列
生成器模式(建造者模式/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,数据结构。