`
王杲杲
  • 浏览: 44390 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

“学习OO好榜样”之Decorator模式

 
阅读更多

外部接口没有变化,但内部实现“偷偷”变化了。其实也不是“偷偷”,更应该光明正大地告诉人家,你是经过装饰的,虽然都有“显示鼻子”的接口方法,但你的鼻子可能是垫了东西的。
需要注意的是,修饰过的类和被修饰的类是同类的。比如,实现相同的接口。
装饰过的类要拥有一个未被装饰类的属性。即关联关系。(合成还是聚合我就懒得区分了。)
装饰过的类的方法通常要在未被装饰类的方法基础上做点手脚,以体现装饰。

顺着脑子想到的一个例子,接口PriceGetter,定义了一个方法int getPrice()。
CommonPriceGetter是实现该接口、正常计算价格的。而95DiscountPriceGetter也实现PriceGetter接口,只是计算出来的价格都是打过95折的。具体实现也很容易想到,95DiscountPriceGetter类拥有一个PriceGetter类型的属性,实例化时候塞一个CommonPriceGetter实例给他,getPrice方法在该实例同名方法返回值的基础上乘以0.95返回,即达到目的。
客户端可以任意选择使用那个类实例计算价格,但都是PriceGetter接口的实例,客户端是依赖于抽象的。

书中关于Adapter与Decorator区别的描述也有点意思。
前者是做手脚把让已有类满足其他接口;后者是在已有类实现接口不变的情况下,做手脚使得方法实现发生变化。前者是芯子不变换外观,后者是外观不变换芯子。

分享到:
评论

相关推荐

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

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

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

    在"C#面向对象设计模式纵横谈(10):(结构型模式) Decorator 装饰模式.pdf"中,你可能会学习到如何定义这些角色以及它们之间的关系。装饰模式的代码结构清晰,易于理解和实现。通过阅读文档,你可以理解如何在C#中...

    设计模式之Decorator

    《设计模式之Decorator》 设计模式是软件工程中的一种最佳实践,它是在特定场景下解决常见问题的经验总结。Decorator模式是一种结构型设计模式,它的主要作用是为对象添加额外的功能,而无需修改对象的源代码。...

    java Decorator模式的简单例子

    Decorator模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在Java中尤其有用,因为它提供了在不改变类结构的情况下扩展类的功能的方法。以下是对Decorator模式的详细...

    Decorator模式的应用

    Decorator模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在Java和其他面向对象编程语言中非常常见,尤其在需要灵活扩展功能而不影响原有类结构的情况下。 在给定...

    Java类库中Decorator模式的应用研究.pdf

    ### Java类库中Decorator模式的应用研究 #### 一、引言 随着软件开发技术的不断发展...在实际项目开发中,合理利用Decorator模式能够有效提升软件的维护性和复用性,是每个Java开发者都应该掌握的重要设计模式之一。

    Decorator模式

    Decorator模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一个关键工具,能够实现对对象功能的动态扩展。 Decorator模式的核心...

    C++ Decorator模式

    Decorator模式是设计模式中的一种结构型模式,它允许在运行时动态地给对象添加新的行为或职责,而不会破坏封装性。这种模式的核心思想是通过装饰类包装原对象,实现对原对象功能的扩展,同时保持与原接口的一致性。 ...

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

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

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

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

    2022年Decorator模式中遭遇继承与聚合Java教程.docx

    Decorator模式是一种设计模式,主要用来在不改变原有对象的基础上,动态地给对象添加新的行为或属性,从而扩展其功能。这种模式在Java等面向对象语言中广泛应用,它提供了一种比继承更加灵活的扩展机制。 在Java中...

    大话西游之设计模式_从猴王学艺看Decorator 配套代码

    "大话西游之设计模式_从猴王学艺看Decorator"这篇文章将设计模式的概念与经典电影《大话西游》中的故事相结合,以生动有趣的方式讲解了Decorator模式。猴王学艺的过程,就如同我们在编程中逐步增加对象的能力,通过...

    装饰器模式[Decorator]

    装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...

    java Decorator装饰模式例子

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...

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

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

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

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

Global site tag (gtag.js) - Google Analytics