- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式(4-2)结构型设计模式 湖北汽车工业学院计算机工程系 主要内容 结构型模式概述 适配器模式 代理模式 桥接模式 组合模式 外观模式 装饰模式 享元模式 三、桥接模式 3.1、背景 当一个抽象有多个实现时,通常用继承来协调它们。例如拉面店加工不同风味的面条(Noodles): ⑴面条样式Style:宽(Wide)、窄(narrow) ⑵酱sauce的种类:猪肉(pork)、牛肉(beef)、羊肉(mutton) 常规的实现方法是采用继承机制描述拉面店提供的产品。 如果面条还有其它样式:粗、细; 酱还有其它种类:三鲜,鸡肉 上述方法势必造成类的爆炸,从而使系统的维护、扩展、复用困难。 3.2、概述 在软件系统中,由于系统业务逻辑的需要,某些类可能具有两个或多个维度的变化: 比如,上例就有面条样式、酱的种类的不同。 如何利用面向对象技术使得该类能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?Bridge模式给出如下方案: 将抽象化 (Abstraction)与实现化 (Implementation)脱耦,使得二者可以独立地变化。 抽象化:“抽象”是存在于多个实体中的共同的概念性联系,可分为抽象的属性和抽象的操作。系统设计中的抽象化是一个过程,它忽略一些信息,把不同的实体当做同样的实体对待。 实现化:实现是抽象元素的具体化。实现化把抽象操作具体化,并通过具体操作来实现属性的具体化。 耦合:,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦。脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。 将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。 桥梁模式在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。 3.3、桥接模式的结构 Abstraction: 定义抽象类的接口;维持一个对Implementor类型对象的引用; RefinedAbstraction: 扩充Abstraction定义的接口 Implementor 定义实现类的接口。该接口不一定与Abstraction的接口一致;一般该接口仅提供基本操作,而Abstraction定义基于这些基本操作的较高层次的操作。 ConcreteImplementor 实现Implementor接口 3.4、本例设计 四、外观模式 一个大的系统一般都由多个子系统构成,每个系统包含多个类,这些类协同合作为用户提供需要的功能。 如果客户程序直接与这些子系统交互,将往往使得客户负担加重。 改进的措施是:引入一个外观对象,使它为子系统中较一般的设施提供一个单一而简单的界面。 Fa?ade: 知道哪些子系统类负责处理请求; 将客户的请求代理给适当的子系统对象 subSystem Class 实现子系统的功能 处理由Fa?ade对象指派的任务 没有Fa?ade对象的任何相关信息 协作: 客户程序把请求发送给Fa?ade,Fa?ade将消息转发给适当的子系统对象。 使用Fa?ade的客户程序不需要直接访问子系统对象。 优点 对客户屏蔽子系统组件,可减少客户处理的对象数目并使得子系统使用起来更加方便; 降低了子系统与客户之间的耦合关系; 五、组合模式 4.1、背景 在面向对象系统中,经常需要处理“部分-整体”这样的层次结构。例如下面的JSwing的菜单结构: 上述菜单结构建立在两类对象基础之上 组合对象,这类对象包含其它对象,如“电气与信息工程学院”、“计算机工程系”、“软件工程教研室”、“付勇智”; 单个对象,这类对象不包含其它对象。一个常用的方法是借助树形结构来实现: 这种层次结构可以用树形结构来描述 树枝结点,对应组合对象 叶子结点,对应个体对象 可否忽略组合对象与个体对象的不同,统一处理这种树形结构? 组合模式解决方案。 Component): 这是一个抽象角色,它给参与组合模式的对象规定一个接口。 这个角色给出共有接口及其默认行为。 Leaf: 表示没有子结点的叶子结点。 Composite: 代表有子对象的树枝结点; 定义树枝结点的行为 储存子对象 实现Component中与子对象有关的操作。 Client 通过Component接口操纵组合模式中的对象。 透明式特点: 在抽象组件Component里面声明所有用来管理子对象的方法,如add()、remove(),以及getChild()。 这样做的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等同的对待所有的对象。 这个选择的缺点是不够安全,因为树叶类对象和合成类对象在本质上是有区别的。树叶类对象不可能有下一个层次
您可能关注的文档
最近下载
- 全球风能理事会:海上风电回顾与展望2025.pdf
- 07SD101-8 电力电缆井设计与安装国标 建筑图集 汇编 .docx VIP
- 2026届“皖南八校”高三第一次大联考地理试卷(含答案解析).docx
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
- 连续梁专项施工方案.doc VIP
- 孟子三章富贵不能淫得道多助失道寡助生于忧患死于安乐拼音注音版.pdf VIP
- 特种设备风险隐患排查记录表.docx VIP
- 17J008挡土墙(重力式、衡重式、悬臂式).pptx VIP
- 07SD101-8电力电缆井图集.pdf VIP
- 《人工智能技术在教育领域应用的》课件.ppt VIP
文档评论(0)