`

设计模式之装饰者模式(Decorator)

阅读更多

装饰者模式:动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

 

装饰者模式类图


装饰者模式的关键点

装饰者与被装饰者必须是一样的类型,即他们有同样的超类型。

 

ConcreteComponentA想要装饰ConcreteComponentB及其子类,ConcreteComponentA中必须有一个ConcreteComponentB的引用,而ConcreteComponentB及其子类都是Component的实现类,因此,ConcreteComponentA中只需要引用Component即可。如果仅从这个程度上来说,完全是策略模式的模型,见下图:


但仅仅通过上图的类结构(也就是策略模式)我们无法完成装饰的目的。因为ConcreteComponentA必须拥有和ConcreteComponentB一样的行为,才能在调用ConcreteComponentB的doSometing()方法时,增加一些额外的职业或者提供更强大的功能,或者完全覆盖掉ConcreteComponentB的doSometing()的行为。因此我们的ConcreteComponentA也必须实现Component接口。也就是说ConcreteComponentA除了拥有一个Component的引用之外,自己还要实现Component接口。ConcreteComponentA除了拥有Component的引用外,ConcreteComponentA也可以再次被Component的其他实现类装饰,也就是说他有可能成为ConcreteComponentC中Component引用的实现,因此ConcreteComponentA实现Component接口也是必须的。

 

装饰者该做的事情就是增加行为(或者修改或者覆盖——这些通过该模式可以实现,但不是装饰者模式的意图)到被包装对象上。不要企图窥视装饰者链中的每一个装饰者,虽然可以实现。

 

你可以用无数个装饰者包装一个组件。装饰者对Client来说是透明的,除非Client依赖于Component的具体类型,但这样做就无法适应变化了。装饰者模式可以动态的装饰任何对象,因为他们通过组合Component来完成装饰的,而不是通过继承。装饰者模式会导致设计中出现许多小对象,如果过度使用,会让程序变得复杂。

 

参考资料:

Head First 设计模式 (中国电力出版社)

  • 大小: 29.1 KB
  • 大小: 21.5 KB
分享到:
评论

相关推荐

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...

    设计模式之 Decorator模式和代码实现

    【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...

    设计模式之装饰者(Decorator)

    装饰者模式是软件设计中的一种行为模式,它允许在运行时动态地给对象添加新的行为或职责,而无需改变对象的原始类。这种模式在不违反开闭原则的前提下,提供了扩展对象功能的能力,使得系统更加灵活,易于维护。 在...

    设计模式之装饰者模式,内含可运行代码

    总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

    c++-设计模式之装饰模式(Decorator)

    装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...

    java设计模式之装饰者模式代码

    装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...

    装饰者模式——Decorator

    装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...

    Qt设计模式之装饰者模式

    装饰者模式(Decorator Pattern)是软件设计模式中的结构型模式之一,它允许在运行时动态地给一个对象添加新的行为或职责,而无需修改对象本身。在Qt库中,装饰者模式也被广泛应用,尤其在实现用户界面组件的扩展和...

    Java设计模式之-Decorator装饰模式

    Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...

    设计模式C++学习之装饰模式(Decorator)

    装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...

    设计模式之装饰者模式-极客学院

    装饰者模式是面向对象设计中的一种结构型模式,它的主要目的是动态地给一个对象添加一些额外的职责,即增加功能,同时又不破坏原有的结构。装饰者模式是一种比继承更灵活的扩展对象行为的方式,它避免了类爆炸问题,...

    设计模式-装饰者模式

    在“设计模式—装饰者模式”中,我们将深入探讨这个模式的概念、实现方式以及实际应用。 装饰者模式的核心概念在于“装饰”(Decorator)和“组件”(Component)。组件是被装饰的基本对象,它可以是接口或者抽象类...

    Decorator装饰者模式

    装饰者模式是一种面向对象的设计模式,它允许在运行时向对象添加新的行为或属性,而无需修改对象的原始代码。这种模式是结构型模式的一种,遵循开闭原则,即对扩展开放,对修改关闭。Head First系列的学习笔记是通过...

Global site tag (gtag.js) - Google Analytics