装饰设计模式:
当对类的功能进行增强时,可称之为对该类的装饰。
同时它的出现具备灵活性
Class Person{
Void chi(){
System.out.println(“chifan”);
}
}
Class newPerson{
Private Person p;
NewPerson(Person p){
This.p = p;
}
Void newChi(){
System.out.println(“来一杯”);
P.chi();
System.out.println(“甜点”);
System.out.println(“来一根”);
}
}
装饰和继承:
装饰设计模式是一种解决某一类问题的思想。该类问题的有效解决方案。解决给类提供增强型功能的问题。
继承:是面向对象的特征之一。
例子:(API中没有真实存在的类)
Writer
|--TextWriter
|--MediaWriter
该体系的出现已经可以完成对文本数据和媒体数据的写操作。
但是发现,效率较低,为了提高效率,就加入了缓冲技术。
文本写入缓冲
媒体写入缓冲
按照面向对象的思想,为了提高扩展,可以通过继承的方式来完成。
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
这样就完成了文本和媒体数据写操作,效率提高。
当如果该体系加入一个子类BaseWriter,而且该子类也需要效率提高,
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
|--BaseWriter
|--BufferedBaseWriter
如果体系扩展,都需要定义一个该子类具备高效缓冲功能的子类。
这样体系扩展很麻烦。
所以我们发现,这些子类使用的缓冲技术都是一样的,缓冲区其实就是定义了临时存储容器将数据进行临时缓冲,至于具体的写操作,还是writer的子类对象完成的,比如TextWriter等
既然这样,可以将缓冲技术单独封装成一个对象。要对那个具体的对象进行缓冲技术的使用,只要将对象传递给缓冲区对象即可。
对缓冲区对象进行单独描述
Class BufferedWriter extends Writer{
BufferedWriter(Writer w){
}
}
当缓冲技术单独封装成了对象后,它具备的还是写功能,只不过可以让其他写功能进行高效,所以它还是Writer类中的一员
所以这时体系变成了这样
Writer
|--TextWriter
|--MediaWriter
|--BufferedWriter
和原来的体系
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
|--BaseWriter
|--BufferedBaseWriter
装饰设计模式的出现可以对一组类进行功能的增强。而且装饰类本身也是该体系中的一个子类。
代码体现:
通常情况下,
装饰类一般不单独存在。
都是通过构造函数接收被装饰的对象
基于被装饰的对象的功能,并对外提供增强的功能。
BufferedWriter//这时一个提供增强功能的类,就把这种优化方式,定义成一种最终解决问题的方案,这种设计模式就是装饰设计模式
装饰设计模式和继承的区别:
继承会让体系变得臃肿
装饰相对来说更为灵活。
在IO中装饰设计模式用的很多。
比如
BufferedWriter
BufferedReader
当对类的功能进行增强时,可称之为对该类的装饰。
同时它的出现具备灵活性
Class Person{
Void chi(){
System.out.println(“chifan”);
}
}
Class newPerson{
Private Person p;
NewPerson(Person p){
This.p = p;
}
Void newChi(){
System.out.println(“来一杯”);
P.chi();
System.out.println(“甜点”);
System.out.println(“来一根”);
}
}
装饰和继承:
装饰设计模式是一种解决某一类问题的思想。该类问题的有效解决方案。解决给类提供增强型功能的问题。
继承:是面向对象的特征之一。
例子:(API中没有真实存在的类)
Writer
|--TextWriter
|--MediaWriter
该体系的出现已经可以完成对文本数据和媒体数据的写操作。
但是发现,效率较低,为了提高效率,就加入了缓冲技术。
文本写入缓冲
媒体写入缓冲
按照面向对象的思想,为了提高扩展,可以通过继承的方式来完成。
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
这样就完成了文本和媒体数据写操作,效率提高。
当如果该体系加入一个子类BaseWriter,而且该子类也需要效率提高,
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
|--BaseWriter
|--BufferedBaseWriter
如果体系扩展,都需要定义一个该子类具备高效缓冲功能的子类。
这样体系扩展很麻烦。
所以我们发现,这些子类使用的缓冲技术都是一样的,缓冲区其实就是定义了临时存储容器将数据进行临时缓冲,至于具体的写操作,还是writer的子类对象完成的,比如TextWriter等
既然这样,可以将缓冲技术单独封装成一个对象。要对那个具体的对象进行缓冲技术的使用,只要将对象传递给缓冲区对象即可。
对缓冲区对象进行单独描述
Class BufferedWriter extends Writer{
BufferedWriter(Writer w){
}
}
当缓冲技术单独封装成了对象后,它具备的还是写功能,只不过可以让其他写功能进行高效,所以它还是Writer类中的一员
所以这时体系变成了这样
Writer
|--TextWriter
|--MediaWriter
|--BufferedWriter
和原来的体系
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
|--BaseWriter
|--BufferedBaseWriter
装饰设计模式的出现可以对一组类进行功能的增强。而且装饰类本身也是该体系中的一个子类。
代码体现:
通常情况下,
装饰类一般不单独存在。
都是通过构造函数接收被装饰的对象
基于被装饰的对象的功能,并对外提供增强的功能。
BufferedWriter//这时一个提供增强功能的类,就把这种优化方式,定义成一种最终解决问题的方案,这种设计模式就是装饰设计模式
装饰设计模式和继承的区别:
继承会让体系变得臃肿
装饰相对来说更为灵活。
在IO中装饰设计模式用的很多。
比如
BufferedWriter
BufferedReader