黑马程序员技术交流社区
标题:
装饰类和继承的区别?
[打印本页]
作者:
尖卡斌引
时间:
2013-5-26 14:22
标题:
装饰类和继承的区别?
装饰类 比继承灵活在什么地方呢? 装饰不还是在内部调用了被装饰的类吗?谁给详细的解释下
作者:
HM刘俊
时间:
2013-5-26 16:22
装饰类之所以比继承灵活,是因为它避免了继承体系给程序带来的臃肿。因为继承只能是单继承的,如果你为了给这个类增加功能就使用继承,那么你就不能再去继承其他的类了。
作者:
kaka小明
时间:
2013-5-26 16:41
假设有一个继承体系:
A-|--A1
|--A2
|--A3
当子类的功能都需要加强,且加强的方法基本一致时,如果采用继承覆写的方式,那么,继承体系显得臃肿(“三代”类出现),为了解决这个问题,引入一个装饰类A‘继承A,它的构造方法中有参数,这个参数就是你需要加强的对象引用,然后通过传入对象的方法加强相应功能。由于有了入参,可以通过多态的形式传入需要加强的对象。因此更加灵活。希望你LZ能明白哈。
作者:
First
时间:
2013-5-26 17:55
这个今天又个类似的问题
下面是我的笔记
/*装饰者设计模式与继承的比较
MyReader//专门用于读取数据-----继承的结构
|--MyTextReader
|--MyBufferTextReader
|--MyMediaReader
|--MyBufferMediaReader
|--MyDataReader
|--MyBufferDataReader
class MyBufferReader
{
MyBufferReader(MyTextReader text){
}
MyBufferReader(MyMediaReader text){
}
MyBufferReader(MyDataReader text){
}
}
该类的扩展性很差,
找到其参数的共同类型,通过多态形式通过扩展性
class MyBufferReader extends MyReader //继承公共父类,即MyReader,而不像继承结构中-继承MyReader的子类
{
MyBufferReader(MyReader r){
}
}
MyReader//专门用于读取数据的类-----装饰模式的结构
|--MyTextReader
|--MyMediaReader
|--MyDataReader
|--MyBufferReader //组合结构
*/
import java.io.*;
class MyBufferedReader extends Reader
{
private Reader fr = null;
MyBufferedReader(Reader fr){
this.fr = fr;
}
public String myReadLine() throws IOException{
StringBuilder sb = new StringBuilder(); //StringBuilder();
int ch = 0;
while ((ch = fr.read())!= -1)
{
if (ch=='\r')
continue; // the keyword continue.
if(ch == '\n')
return sb.toString();
sb.append((char)ch);
}
if (sb.length() != 0)
return sb.toString(); //important to return the last line.
return null;
}
public int read (char[] buf, int off, int len) throws IOException{
return read (buf, off, len); //调用对象方法
}
public void close() throws IOException{
fr.close(); //调用对象方法
}
public void myClose() throws IOException{
fr.close();
}
}
class MyBufferedReaderDemo{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("buf.txt");
MyBufferedReader mr = new MyBufferedReader(fr);
String line = null;
while ((line = mr.myReadLine()) != null)
{
System.out.println(line);
}
System.out.println("Hello World!");
}
}
复制代码
毕老师的课程是第19天
装饰和继承的比较
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2