11对缓冲流分析出来的设计模式--装饰设计模式
2016-07-24 23:14
239 查看
缓冲流其实还是调用基本流的输入/输出,是未修改原来文件的基础上拓展出来的功能。
装饰设计模式:
试用场景:当想要对已有的对象进行功能拓展时。
流程:可以定义类,将已有对象传入,基于已有的功能,并提供增强的功能。
那么自定义的类成为包装类(装饰类)。
code:
class Person {
void study {
syso("book");
}
}
class PersonPlus {
Person p;
PersonPlus(Person p) {//code中一般讲基本类型对象通过自定义类的构造方法接受
this.p = p;
}
void studyPro() {//基于基础类拓展
syso("browser");
p.study();
syso("...");
}
}
*装饰设计模式和继承的区别:
引入:继承关系下的读文件结果
MyReader//一个做读取的类
|--TextReader//文本读取
|--MediaReader// 媒体文件读取
拓展:加入缓冲技术提高读数据效率。
MyReader//一个做读取的类
|--TextReader//文本读取
|--TextBufferedReader extends TextReader 复写read //文件的缓冲流
|--MediaReader// 媒体文件读取
|--MediaBufferedReader extends MediaReader 复写read// 媒体的缓冲流
改机构不足:若加入读取文件的新类型,每个类都需要各自拓展;结构及维护性差
装饰模式:
MyReader//一个做读取的类
|--TextReader//文本读取
|--MediaReader// 媒体文件读取
|--BufferedReader // 加入改读取流体系中,对Text、Media等拓展
好处:仅维护拓展的该类即可,就算该类写挂了,不适用即可。
class BufferedReader extends MyReader{ //加入该体系中
BufferedReader(MyRader my) { // 使用多态最大限度话的拓展
...
}
}
装饰设计模式:
试用场景:当想要对已有的对象进行功能拓展时。
流程:可以定义类,将已有对象传入,基于已有的功能,并提供增强的功能。
那么自定义的类成为包装类(装饰类)。
code:
class Person {
void study {
syso("book");
}
}
class PersonPlus {
Person p;
PersonPlus(Person p) {//code中一般讲基本类型对象通过自定义类的构造方法接受
this.p = p;
}
void studyPro() {//基于基础类拓展
syso("browser");
p.study();
syso("...");
}
}
*装饰设计模式和继承的区别:
引入:继承关系下的读文件结果
MyReader//一个做读取的类
|--TextReader//文本读取
|--MediaReader// 媒体文件读取
拓展:加入缓冲技术提高读数据效率。
MyReader//一个做读取的类
|--TextReader//文本读取
|--TextBufferedReader extends TextReader 复写read //文件的缓冲流
|--MediaReader// 媒体文件读取
|--MediaBufferedReader extends MediaReader 复写read// 媒体的缓冲流
改机构不足:若加入读取文件的新类型,每个类都需要各自拓展;结构及维护性差
装饰模式:
MyReader//一个做读取的类
|--TextReader//文本读取
|--MediaReader// 媒体文件读取
|--BufferedReader // 加入改读取流体系中,对Text、Media等拓展
好处:仅维护拓展的该类即可,就算该类写挂了,不适用即可。
class BufferedReader extends MyReader{ //加入该体系中
BufferedReader(MyRader my) { // 使用多态最大限度话的拓展
...
}
}
相关文章推荐
- android 中的数值颜色
- UIButton重复点击几个方法
- 20160724-leetcode-array
- 10缓冲流的文件复制
- 关于HTML面试题汇总
- myeclipse2014添加反编译插件
- 【杭电2011】多项式求和
- AngularJS中的基础路由,通过ng-route实现基本的路由功能
- Ubuntu 16.04中 Qt 5.6 中无法调用fcitx输入中文的问题
- Asp.net C#页面传参的几种方式
- 编程同写作,写代码只是在码字
- (转)通过Net-Speeder为搬瓦工提升网速
- POJ3006
- mysql如何在一个存储过程中使用另外一个存储过程的结果集
- javaScript函数使用
- POJ 1651 Multiplication Puzzle(区间dp)
- 【转载】如何用子网掩码得到网络/主机地址
- nginx 哈希表数据结构
- 5.机器学习实战之Logistic回归
- 基于Spring Boot和Spring Cloud实现微服务架构学习(六)-Docker应用