Java的装饰模式中装饰角色已经可以扩展其它的功能,为什么还要设置一个具体装饰角色?



                    
                    
lunaseayoyo
84069 次浏览 2024-06-04 提问
85

最新回答 (2条回答)

2024-06-04 回答

因为扩展需可能要多个具体装饰器角色是可以合并的,但是不建议这样做,全部合并都没关系,那么装饰器角色 就可以操作多个了,简单的说如果你1对1的情况

追问如果是要应对1对多的情况,具体构件角色与装饰角色都是实现共同的接口,完全可以使用这个接口就可以实现了呀!我思前想后就是觉得,装饰角色和具体装饰角色中有一个是多余的样子,可能是我脑子不好使,我真是想不出让它们两个同时存在的必要性。如果可以的话,请大侠能告诉我这两者同时存在,而且能各自发挥其作用的情景。谢谢回答API:FilterInputStream
包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。FilterInputStream
类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream
的所有方法。FilterInputStream 的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

JAVA 设计喜欢 通过定义接口,然后定义抽象实现(或者普通实现),最后才是具体实现 进行扩展。
接口 定义普通功能,抽象实现(或者普通实现) 可能完成普通功能,这里的完成其实仅仅是完成了能够使用的,比如abstractHashMap 抽象类的实现。FilterInputStream 这个 没定义成抽象类,说明JDK 允许直接使用,而我们不直接使用,是因为后面提供了 更好的方式,你觉得可以合并,是因为你没经历前期设计,比如当时只有 DataInputStream ,没有BufferedInputstream 的话,你就要自己构建 BufferedInputstream ,你前面把DataInputStream 合并了,就要重复一部分功能了。分开的原因是我们还可以继承FilterInputStream 创造更多的,更适合我们自己的类。 比如 map/redurce 其实也是继承了map 的优点,然后创造更多的东西。 我们的写代码的时候尽量 分开各部分功能,提炼公共部分,很多情况下 感觉没有,就写在一起了,但是从长远考虑,不利于后期的扩展,和兼容
2024-06-04 回答

具体装饰角色,
装饰角色:FileInputStream告诉你个情景吧,ByteArrayInputStream:FilterInputStream:DataInputStream,BufferedInputstream,java io
抽象构建角色:inputstream ,具体构建角色

追问这个情景下,装饰角色:FilterInputStream有的功能,在具体装饰角色都是有的,同样也可以将这两个角色合并在一起的呀!比如,我们在使用的时候一般都不会直接使用FilterInputStream类,而是使用具体装饰角色,我们可以将代码改成用具体装饰角色直接继承inputstream,如果要使用1对多的情况,可以使用inputstream的多态在表示,这样也可以呀?!请指教,谢谢回答我觉得加入装饰角色的另一个意图应该是:装饰角色对抽象构建角色有一个基本的实现,便于各种具体装饰角色的复用,如果不能复用的,再重写。

扩展回答

装饰公司的运作模式

具体的方案

扮演兔子的角色都有什么装饰

扮演兔子的角色都有什么装饰

设计模式中的装饰者模式示例讲解


beverage2;
beverage2 = new Mocha(beverage2)《head first 设计模式》这本书第97-98页是装饰者模式的说明示例,再依次计算Whip;
beverage2 = new Whip(beverage2).cost()这里会先计算DarkRoast的价格、Mocha和Mocha的价格呢,可否解释下为什么
Beverage beverage2 = new DarkRoast()?谢谢?为什么会有这样嵌套计算的逻辑;
beverage2 = new Mocha(beverage2)

求装饰公司的管理运营模式

我是一名在职的家装设计师 最近我已经开始筹划自己和朋友一起开一家装饰公司  只是缺乏对管理方面的知识 希望有了解的朋友 帮忙一下
知道一下 装饰公司的管理运营方面的知识 还有目前中国装饰市场哪里最丰裕!谢!

CF的角色的装饰,就是帽子啊什么的,装饰会被打中吗

F角色穿的装饰,想帽子,背包之类的,这些东西会被别人打中吗

相关问题

页面运行时间: 0.12906098365784 秒