黑马程序员技术交流社区
标题:
关于装饰模式的疑惑
[打印本页]
作者:
彩虹
时间:
2012-5-20 13:11
标题:
关于装饰模式的疑惑
装饰模式,继承模式,封装模式之间有什么区别与联系?装饰类与IO流中的作为缓冲区之类的类又有何相同点与不同点?
class MyBufferReader extends MyReader
{
private MyReader r;
MyBufferReader(MyReader r)
{}
}
MyReader//专门用于读取数据的类
这段代码被称为装饰模式,在结构上他运用了继承的机制,而却我觉得MyBufferReader类实现的功能跟缓冲区没什么太大的区别,那么为什么称它为装饰模式呢???
请高手赐教!!!
作者:
8161776
时间:
2012-5-20 13:29
class MyBufferReader extends MyReader
{
private MyReader r;
MyBufferReader(MyReader r)
{}
}
MyReader//专门用于读取数据的类
这段代码被称为装饰模式,在结构上他运用了继承的机制,而却我觉得MyBufferReader类实现的功能跟缓冲区没什么太大的区别,那么为什么称它为装饰模式呢???
对呀,MyBufferReader就是一个缓冲区,就是模拟BufferReader写的一个缓冲流
他之所以称为装饰模式,是因为他不能直接读取文件,他得通过包装一个Reader,他只是把Reader给装饰了一下,让他功能更加强大,但是他其实是用的Reader来读取的
作者:
李文富
时间:
2012-5-20 14:50
装饰模式,继承模式,封装模式之间有什么区别与联系
装饰模式:是在原有类的基础上扩展,使该类的功能更丰富,
也就是说接收一个类进来包装一下它,而不用重写它。
继承模式:是按事物分类后,如果遇到的问题属于某一类但又明显
有自己的区分特点应该让其独立出来,也就是继承。
封转模式:把自己类中的成员封装起来,决定如何提供对外可视的
窗口(public protect private),注重数据的保护。
装饰类与IO流中的作为缓冲区之类的类又有何相同点与不同点?
你自己写的装饰类只是模仿io缓冲区的读功能,缓冲区BufferdRead还有很多扩展的功能,可查看api文档。
这只是个简单说明下什么是装饰类,怎样使用它,当然也没有必要去用这个装饰类。直接用BufferdRead。
作者:
黑马任雪刚
时间:
2012-5-20 15:07
装饰设计模式:想要对已有的对象进行功能增强时,可以定义类将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类就是装饰类。
装饰类一般会通过构造函数接收被装饰的对象。并基于被装饰对象的功能提供更强的功能。
相对于继承,装饰类更灵活,避免了继承体系的臃肿。而且降低了类于类之间的关系。
代码示例:
继承示例:
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流中的作为缓冲区之类的类就是封装模式中的一种。
作者:
谭威
时间:
2012-5-21 12:07
你可以去看IO部分的源代码,,里面之所以有那么多各种各样的流就是用的装饰模式。。目的就是对已有功能进行扩展,在不使用继承的情况下装饰模式就能达到这种效果。。
就是”即插即用“
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2