美文网首页Java设计模式
Java设计模式之装饰模式趣谈

Java设计模式之装饰模式趣谈

作者: 7e86aaa7b08a | 来源:发表于2019-08-26 21:35 被阅读138次

JVM:”上次给我招的工人不错啊!”

oo程序员:”………..”

JVM:”现在来我开的博物馆生意越来越好了,原来”舞台剧”的方式已经不能满足顾客的需求了”

oo程序员:”………..”

JVM:”我决定要换一种运营模式,把每个演播厅都租出去,让那些想表演节目的对象们来租演播厅和相关器械,这样我就能坐地收钱了!”

oo程序员:”………..”

JVM:”合伙干吧?怎么样?你三我七!”

oo程序员:”………..”

JVM:”四六?”

oo程序员:”成交!先说说需求。”

JVM:”首先有不同类型的演播厅和不同的装饰品/器械,每种物品都要付一定的租金,你要做的就是一件事,把总租金(演播厅+饰品/器械)算出来。”

oo程序员:”把价格表给我!”

最后还写下了这个:

仔细一想也对,无论是演播厅还是装饰品,都需要描述(description)和cost(价格),写一个共同的父类无可厚非。

接着写下你设计的第一个类:

第二个:

第三个:

。。。。。

没有第三个了!这样写下去可是无穷无尽的!没办法,换个思路。

在演播厅里,无论什么装饰品都有可能出现,可以把演播厅+饰品看成一个整体,通过饰品相应的has和set来控制饰品,这样的话,设计出来的类如下:

这个看起来好多了,不用写大爆炸数量的类,虽然类写起来又臭(无数的has/set)又长(的确很长)。。。。。

但是有没有更好的方案?

答案当然是有的,不过我们必须先明确一下,上述设计的缺点。

1.臭

2.长

3.当饰品的租金改变的时候,必须修改所有演播厅的代码(cost部分),我们当然不想这样,我们想尽可能的少修改代码(松耦合)。

4.没有面对超类/接口编程。

5.没有将变化的部分独立开。

6.组合可能是更好的解决方案。

下面让我们看看。装饰者模式是如何解决上面问题的。

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

首先,我们先将演播厅和他的装饰者们分开,让装饰者继承另一个类:

让装饰者子类重新实现getDescription()即可。

现在我们的思路是:用装饰者装饰演播厅,例如,一个带麦克风和气球的卡通演播厅,就先让气球装饰卡通演播厅,再让麦克风装饰“带气球的卡通演播厅”

先让我们分别实现这3个类:

卡通演播厅:

麦克风:

气球:

代码:

输出结果:

结果是正确的。

这样写很好的解决了上面的问题。

1.运用组合进行扩展,使当价格改变的时候,只需要修改本身的代码。

2.面对超类/接口编程,使饰品增加种类的时候,并不需要修改被装饰者的代码。

3.开放——关闭原则 :代码应该对扩展开放,对修改关闭。

缺陷:

1.子类繁多,影响理解代码(java I/O就是装饰者模式哦。。。)。

2.无法应用于需要具体类的场景。

3.更多资料免费领取V:19821111174

相关文章

  • Java设计模式之装饰模式趣谈

    JVM:”上次给我招的工人不错啊!” oo程序员:”………..” JVM:”现在来我开的博物馆生意越来越好了,原来...

  • Java设计模式之装饰器模式

    Java设计模式之装饰器模式 本文仅是个人观点,如有错误请指正 简介 装饰器模式(Decorator Patter...

  • Java设计模式之 —— 装饰者(Decorator) — 点

    Java设计模式之 —— 装饰者(Decorator) — 点炒饭 下面会用做炒饭的例子来描述一下装饰者设计模式,...

  • 装饰者模式——IO流运用

    推荐博客Java设计模式学习09Java设计模式学习09Java设计模式学习09 装饰者模式还是比较难懂的。。。。...

  • Java设计模式——装饰器模式

    Java设计模式之装饰器模式 回顾 上一次分享的组合模式相信大家已经理解其中的精髓,那么这次跟大家聊聊装饰器模式。...

  • Java设计模式——单例模式(Singleton Pattern

    从上一篇文章Java设计模式——装饰模式(Decorator Pattern)中估计大家都已经对java设计模式有...

  • 设计模式

    设计模式之旅 图说设计模式 小猪的设计模式初涉总结 Java之美[从菜鸟到高手演变]之设计模式 Java之美[从菜...

  • Java设计模式之装饰模式

    定义 像现有的一个对象添加新的功能,同时又不改变其结构,它是作为现有的一个类的包装。 装饰模式创建了一个装饰类,包...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • java IO 的知识总结

    装饰者模式 因为java的IO是基于装饰者模式设计的,所以要了解掌握IO 必须要先清楚什么事装饰者模式(装饰者模式...

网友评论

    本文标题:Java设计模式之装饰模式趣谈

    本文链接:https://www.haomeiwen.com/subject/bakjectx.html