java设计模式之装饰模式适配器模式的疑惑

上面两个类使用了装饰模式,BufferedInputStream具有InputStream所有的方法,同事只是增加了几个private(fill,ensureOpen)方... 上面两个类使用了装饰模式,BufferedInputStream具有InputStream所有的方法,同事只是增加了几个private(fill,ensureOpen)方法,客户端也根本察觉不到这些新加的private方法呀。
所以 一个理想的装饰类应该让客户端根本察觉不到所使用的是一个装饰对象,而不是原始流对象。这句话理解有点困惑。
展开
 我来答
longjuelegend
推荐于2016-05-09 · TA获得超过821个赞
知道小有建树答主
回答量:483
采纳率:50%
帮助的人:222万
展开全部
private 方法对于外部类来说都是不可见的,也就是说这里BufferedInputStream增加的几个私有方法外界是无法获知的,所以外界是无法察觉的;因为装饰类和原始类,我们所看到的他们的共有方法都是相同的,其实他们的内部实现是不同的,但是这点我们如果不看源码也是无法得知的,这个就是装饰类。
更多追问追答
追问

是装饰类毫无疑问,但,是半透明式装饰还是理想的装饰模式呢?我的理解的这应该是理想的装饰模式,可是java与模式这本书上说的是半透明模式,有点怀疑是不是书本写错了呢。

ensureOpen() fill() 都是private 方法 客户端这么能调用到呢。

我认为它没有破坏理想装饰模式。你说呢?

追答
private方法是针对外部无法调用,对于本类当然是可以调用的呀,客户端如果实例化了本类的实例对象就可以调用呀,这个肯定是有悖于装饰模式的设计模式的;对于装饰模式,应该是对于装饰类的外界而言,无需知道是不是 这个装饰类,只需要调用就可以完成这个业务逻辑。比如某一个方法的返回值是InputStream,但是实际上我们的代码返回的是一个Buffered....,这样我们通过这个方法拿到的InputStream如果进行任何操作实际上都不应该强制转换成Buffer.....,这样才是地道的装饰模式,同时也体现了面向对象的性质,如果某一个操作需要强制转换成Buffered....才能操作的话,比如那些私有的方法,这实际上就是破坏了装饰模式,如果一个程序员不了解这个装饰类的内部的实现的话,也是无法进行操作的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式