`

设计模式笔记心得(2)--Bridge模式,Decorator模式

阅读更多
Bridge模式
Bridge的核心就是将抽象和实现分离, 让二者独立变化
当需要将类的行为和属性分离的时候,可以采用Bridge模式, 在抽象体实现属性, 在实现体实现行为, 从而达到属性和行为能独立变化, 他们之间通过桥接(也就是将二者绑定, 在抽象类中隐藏)的方式来进行关联, 而且这种桥接绑定的关系是可动态改变的, 这也是与继承相比最大的优点, 有时候我们也可以将其理解为代理模式的一种演化, 将行为代理给各个不同的行为实现类来处理.
该模式在行为和属性存在交叉重合的场景下非常有用, 比如网上那个coffee的例子可谓bridge模式的经典例子, coffee有两种属性:大杯和中杯, 同时有两种行为:加奶和不加奶, 这样属性和行为可以交叉组合而得到不同的coffee.

Bridge模式是使用组合而非继承的典型模式

Decorator模式
装饰器模式的两个要点:
1.装饰器类必须继承被装饰类;
2.装饰器类必须持有被装饰类实例;
采用Wrapper模式的说法可能更形象一些, 实际上就是在具体类的基础上一层层添加所需要的功能, 将被装饰的对象采用不同的装饰类层层包裹起来, 同Bridge模式一样, 他也采用组合的方式来将某个功能添加到抽象类之上, 当需要将各种装饰效果进行组合的时候可以避免生成多个抽象类的子类.

为何采用Decorator而不是普通的继承?
一般通过继承来扩展一个功能, 最简单的就是对要扩展的方法进行复写, 另一个就是添加抽象方法交给子类自己去实现, 功能越多,添加的抽象方法就越多, 而这些方法都是静态的, 一旦要派生具体子类就必须实现(或者空实现) , 而这些抽象方法的调用方式也是固定的(除非复写再改写), 这样显然是不够灵活的做法, 而且如果存在多种功能的组合会导致派生的子类成几何数增长, 当出现这种情况时我们就不应该使用简单的继承,而应该进行重构使用其他的设计模式来更好的满足我们的需求.

Decorator和Bridge的区别
Decorator是对已有功能的增强, 装饰类都是围绕被装饰类已有的功能而展开的, 无论装饰类怎么变, 它都必须围绕被装饰类来变化(或者是围绕二者公共的接口来变化), 因为对于客户程序来说, 调用装饰前后的对象应该是一致的. 而Bridge模式是将行为从被桥接对象(抽象类)中分离出去, 完全放到实现类中去实现, 行为实现将更少的受到被桥接对象的限制. 所以如果这种约束是必要的,就可以采用Decorator模式, 反之则可以采用Bridge模式

注意事项
Decorator, Bridge采用的是组合模式, 不可避免的需要创建一些类实例, 相对于继承来说内存消耗要相对大一些, 比如使用Decorator除了需要new装饰器类实例还需要new被装饰类, 因此出于效率的考虑new出来的对象应该尽可能的小, 也就是要做到new的对象类必须职责单一, 按需来new对象, 对于Decorator来说, 抽象对象的实现应该尽可能的简单, 将复杂的东东放到装饰类中实现, 而Bridge则要将不同的职责封装到行为实现中
分享到:
评论

相关推荐

    设计模式笔记设计模式笔记

    设计模式笔记是对这些模式的深入理解和应用记录,可以帮助开发者在面对复杂系统设计时,快速找到合适的结构和策略。以下是关于设计模式的一些核心知识点: 1. **设计模式的分类**: - 创建型模式:如单例...

    设计模式学习笔记大全

    以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    图解Java设计模式笔记总结word版本.rar

    本资料“图解Java设计模式笔记总结word版本”聚焦于通过图文并茂的方式,深入浅出地解析各种设计模式。以下是基于这个主题的详细知识点讲解: 1. **设计模式的分类** - **创建型模式**:如单例(Singleton)、工厂...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    设计模式复习笔记大全

    ### 设计模式复习笔记大全 #### 一、设计模式概览 **设计模式**是一种用于在特定场景下解决常见设计问题的方案。它通常描述了一组相互作用的类和对象,以及这些对象如何通信来解决问题。设计模式的核心要素包括...

    设计模式整理代码-pattern.zip

    在IT行业中,设计模式是软件开发中的一种标准解决方案,它代表了在特定上下文中解决常见问题的最佳实践。这里我们关注的是一个名为"pattern.zip"的压缩包文件,它包含了23种经典的设计模式,这些模式在实践中被广泛...

    23个设计模式图解--学习笔记

    在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...

    台湾人写的设计模式笔记

    这份由台湾作者编写的笔记,结合Java语言,为读者提供了一种深入理解并应用设计模式的方式。以下是对这些设计模式的详细解释: 1. **创建型模式(Creational Patterns)** 创建型模式关注于对象的创建过程,它们帮助...

    设计模式总结笔记设计模式总结笔记

    ### 设计模式总结笔记 #### 一、概述 设计模式是一种在特定上下文中解决软件设计问题的方案。它并不是一种现成的代码片段或者框架,而是一种指导思想,帮助开发者理解如何更好地组织代码来解决问题。设计模式可以...

    23种设计模式的解析与Cpp实现

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。在C++编程中,理解并应用设计模式可以显著提升代码的可读性、可维护性和复用性。本资源“23种设计模式的解析与Cpp实现”详细介绍...

    23种面向对象设计模式

    2. **结构型模式**(Structural Patterns):主要关注如何组合类和对象以实现更大的结构,包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、...

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    ### 设计模式基础及其重要性 #### 设计模式概述 设计模式是一种被广泛采用的、经过验证的解决方案,用于解决软件开发过程中常见的设计问题。它不仅帮助开发者编写可复用的代码,还促进了团队成员之间的有效沟通。...

    设计模式笔记总结 含C#示例代码 复习好帮手

    ### 设计模式笔记总结 本篇文章是对一份设计模式学习资料的深入解读,这份资料包含了19种经典的设计模式,并提供了C#示例代码,适用于学习和复习。下面将逐一介绍这些设计模式及其核心概念。 #### 1. 简单工厂模式...

    设计模式的读书总结笔记

    2. 结构型模式:包括适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)。它们处理对象之间的关系,如组合...

    设计模式笔记

    在《设计模式笔记》中,博主可能详细讲解了这些模式的概念、应用场景和实现方式。文档“笔记.doc”可能包含了对每个模式的深入分析,包括其优点、缺点以及如何在实际项目中有效利用它们。例如,单例模式确保一个类...

    GoF 23种设计模式学习笔记

    "GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...

    23中设计模式学习笔记.docx

    ### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...

    java23种设计模式,3套视频加1个ppt

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可重用性、灵活性和可维护性。23种设计模式被广泛接受并分类为三大类:创建型模式(Creational Patterns)、结构型...

Global site tag (gtag.js) - Google Analytics