A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彩虹 中级黑马   /  2012-5-20 13:11  /  1586 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

装饰模式,继承模式,封装模式之间有什么区别与联系?装饰类与IO流中的作为缓冲区之类的类又有何相同点与不同点?
class MyBufferReader extends MyReader
   {
          private MyReader r;
        MyBufferReader(MyReader r)
        {}
   }
   MyReader//专门用于读取数据的类
这段代码被称为装饰模式,在结构上他运用了继承的机制,而却我觉得MyBufferReader类实现的功能跟缓冲区没什么太大的区别,那么为什么称它为装饰模式呢???
请高手赐教!!!

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
class MyBufferReader extends MyReader
   {
          private MyReader r;
        MyBufferReader(MyReader r)
        {}
   }
   MyReader//专门用于读取数据的类
这段代码被称为装饰模式,在结构上他运用了继承的机制,而却我觉得MyBufferReader类实现的功能跟缓冲区没什么太大的区别,那么为什么称它为装饰模式呢???
对呀,MyBufferReader就是一个缓冲区,就是模拟BufferReader写的一个缓冲流
他之所以称为装饰模式,是因为他不能直接读取文件,他得通过包装一个Reader,他只是把Reader给装饰了一下,让他功能更加强大,但是他其实是用的Reader来读取的

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
装饰模式,继承模式,封装模式之间有什么区别与联系
装饰模式:是在原有类的基础上扩展,使该类的功能更丰富,
               也就是说接收一个类进来包装一下它,而不用重写它。
继承模式:是按事物分类后,如果遇到的问题属于某一类但又明显
               有自己的区分特点应该让其独立出来,也就是继承。
封转模式:把自己类中的成员封装起来,决定如何提供对外可视的
               窗口(public protect private),注重数据的保护。
装饰类与IO流中的作为缓冲区之类的类又有何相同点与不同点?
你自己写的装饰类只是模仿io缓冲区的读功能,缓冲区BufferdRead还有很多扩展的功能,可查看api文档。
这只是个简单说明下什么是装饰类,怎样使用它,当然也没有必要去用这个装饰类。直接用BufferdRead。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
装饰设计模式:想要对已有的对象进行功能增强时,可以定义类将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类就是装饰类。
装饰类一般会通过构造函数接收被装饰的对象。并基于被装饰对象的功能提供更强的功能。
相对于继承,装饰类更灵活,避免了继承体系的臃肿。而且降低了类于类之间的关系。


代码示例:
继承示例:
class Animao()
{
                void method()
                {}
}
class mouse() extends Animal
{}
class Dog() extends Animal
{}
...............(代码比较臃肿)

装饰示例:

class Tanimal()
{
              private Animal a;(可以传dog也可以传Mouse)
              public void method(Animal a)
              {
                       
               }  
}(降低类与类之间的关系)


而封装模式就是把一些代码封装起来,提高代码的复用性,比如经常用到的类,和类中的方法都属于封装模式。


而你说的:IO流中的作为缓冲区之类的类就是封装模式中的一种。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你可以去看IO部分的源代码,,里面之所以有那么多各种各样的流就是用的装饰模式。。目的就是对已有功能进行扩展,在不使用继承的情况下装饰模式就能达到这种效果。。

就是”即插即用“  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马