java设计模式之装饰模式适配器模式的疑惑
上面两个类使用了装饰模式,BufferedInputStream具有InputStream所有的方法,同事只是增加了几个private(fill,ensureOpen)方...
上面两个类使用了装饰模式,BufferedInputStream具有InputStream所有的方法,同事只是增加了几个private(fill,ensureOpen)方法,客户端也根本察觉不到这些新加的private方法呀。
所以 一个理想的装饰类应该让客户端根本察觉不到所使用的是一个装饰对象,而不是原始流对象。这句话理解有点困惑。 展开
所以 一个理想的装饰类应该让客户端根本察觉不到所使用的是一个装饰对象,而不是原始流对象。这句话理解有点困惑。 展开
1个回答
展开全部
private 方法对于外部类来说都是不可见的,也就是说这里BufferedInputStream增加的几个私有方法外界是无法获知的,所以外界是无法察觉的;因为装饰类和原始类,我们所看到的他们的共有方法都是相同的,其实他们的内部实现是不同的,但是这点我们如果不看源码也是无法得知的,这个就是装饰类。
更多追问追答
追问
追答
private方法是针对外部无法调用,对于本类当然是可以调用的呀,客户端如果实例化了本类的实例对象就可以调用呀,这个肯定是有悖于装饰模式的设计模式的;对于装饰模式,应该是对于装饰类的外界而言,无需知道是不是 这个装饰类,只需要调用就可以完成这个业务逻辑。比如某一个方法的返回值是InputStream,但是实际上我们的代码返回的是一个Buffered....,这样我们通过这个方法拿到的InputStream如果进行任何操作实际上都不应该强制转换成Buffer.....,这样才是地道的装饰模式,同时也体现了面向对象的性质,如果某一个操作需要强制转换成Buffered....才能操作的话,比如那些私有的方法,这实际上就是破坏了装饰模式,如果一个程序员不了解这个装饰类的内部的实现的话,也是无法进行操作的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询