- 1、本文档共138页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * 谁来选择使用哪种策略? * * * * * * * * * * * * * * * * * 解答 8、建造者(Builder)模式 当系统准备为用户提供一个内部结构复杂的对象时,就可以使用建造者模式,使用该模式可以逐步地构造对象,使得对象的创建更具弹性。建造者模式的关键是将一个包含有多个组件对象的创建分成若干个步骤,并将这些步骤封装在一个称作建造者的接口中。 * 建造者(Builder)模式的由来 在软件系统中,有时面临着“一个复杂对象”的创建工作,该复杂对象通常由各个部分的子对象用一定的算法构成 这个复杂对象的各个部分经常面临着剧烈变化,但是将它们组合在一起的算法却相对稳定 如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变? 建造者模式的意图和适用性 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示 适用性场合 需要生成的产品对象有复杂的内部结构 创建复杂对象的算法稳定,或建造者模式可以强迫生成一定的顺序 当构造过程允许被构造的对象有不同的表示时 建造者模式的结构 建造者模式的参与者 Builder:为创建一个Product对象的各个部件指定抽象接口 ConcreteBuilder:实现Builder接口来构造和装配产品各个部件,提供一个检索产品的接口 Director:构造一个使用Builder接口的对象 Product:表示被构造的复杂对象 实例:设计游戏场景中的房屋 房屋由五个部分组成:地板、墙壁、窗户、门和天花板 构建房屋的步骤固定,而具体组件(门、窗等)易变 采用建造者模式分离易变组件和稳定的构建过程 建造者模式的应用示例 public abstract class House //定义一个房屋抽象类 { } public abstract class Builder //这一部分是易变的 { public abstract void BuildFloor(); //地板 public abstract void BuildDoor(); //门 public abstract void BuildWindows(); //窗户 public abstract void BuildWall(); //墙壁 public abstract void BuildHouseCeiling() //天花板 public abstract House GetHouse(); } 建造者模式的应用示例 建造者模式的应用示例 public abstract class GameManager { public static House CreateHouse(Builder builder) { builder.BuildFloor(); builder.BuildDoor(); builder.Buildwall(); builder.BuildWindows(); builder.BuildHouseCeiling(); return builder.GetHouse(); } } 建造者模式的应用示例 public class RomanHouseBuilder : Builder { public override void BuildDoor() { } public override void BuildFloor() { } public override void BuildWindows() { } public override void BuildWall() { } public override void BuildHouseCeiling() { } public override House GetHouse() { } }
文档评论(0)