设计模式之---装饰模式
2015-12-01 15:19
405 查看
装饰模式:就是扩展一个类的功能,在原来类的基础上增加一个修饰类,增强原来来的功能。
例子:java中的流,就是使用装饰模式,不断增加新的读取的方法。
package decorator;
import java.io.File;
public abstract class InputStream {
public abstract void readByte(File file);
}
package decorator;
import java.io.File;
public class InputStreamReader extends InputStream{
public void readByte(File file) {
System.out.println(this.getClass().getName());
System.out.println("我是InputStreamReader");
}
}
package decorator;
import java.io.File;
public abstract class Decorator extends InputStream{
private InputStream inputStream;
public Decorator(InputStream inputStream) {
this.inputStream = inputStream;
}
//原来的方法
public void readByte(File file){
inputStream.readByte(file);
}
}
package decorator;
import java.io.File;
public class BufferedReader extends Decorator{
public BufferedReader(InputStream inputStream) {
super(inputStream);
}
public void readByte(File file) {
super.readByte(file);
}
public void readString(File file) {
System.out.println("调用已有的方法");
this.readByte(file);
System.out.println("我每次读取一行");
}
}
package decorator;
import java.io.File;
public class FileClient {
public static void main(String[] args){
BufferedReader inputStream=new BufferedReader(new InputStreamReader());
inputStream.readString(new File(""));
}
}
例子:java中的流,就是使用装饰模式,不断增加新的读取的方法。
package decorator;
import java.io.File;
public abstract class InputStream {
public abstract void readByte(File file);
}
package decorator;
import java.io.File;
public class InputStreamReader extends InputStream{
public void readByte(File file) {
System.out.println(this.getClass().getName());
System.out.println("我是InputStreamReader");
}
}
package decorator;
import java.io.File;
public abstract class Decorator extends InputStream{
private InputStream inputStream;
public Decorator(InputStream inputStream) {
this.inputStream = inputStream;
}
//原来的方法
public void readByte(File file){
inputStream.readByte(file);
}
}
package decorator;
import java.io.File;
public class BufferedReader extends Decorator{
public BufferedReader(InputStream inputStream) {
super(inputStream);
}
public void readByte(File file) {
super.readByte(file);
}
public void readString(File file) {
System.out.println("调用已有的方法");
this.readByte(file);
System.out.println("我每次读取一行");
}
}
package decorator;
import java.io.File;
public class FileClient {
public static void main(String[] args){
BufferedReader inputStream=new BufferedReader(new InputStreamReader());
inputStream.readString(new File(""));
}
}
相关文章推荐
- hiho刷题日记——第二十六天最小生成树一·Prim算法
- hiho刷题日记——第二十七天最小生成树二·Kruscal算法
- UINavigationController技巧<一>——修改返回按钮的标题
- Linux系统安装VMware Tools
- Qt 创建状态栏
- android 广播更新界面
- Java读书笔记十六(Java中的枚举类)
- 助你美化网站的实用css3技巧(1)
- Android 关于Scrollview和listview嵌套以及下拉刷新问题(附源码)
- Sql Server 语句大全
- XML字符转译
- VS快速生成JSON数据格式对应的实体
- js实现继承的5种方式
- mongodb常用基本管理命令
- linux启动oracle数据库
- java用jdbc连接neo4j
- 电影
- 设置UITableView中Cell的间隔线从0点开始
- 如何修改 UINavigationController、UINavigationBar 中 navigationItem 左侧 “返回” 按钮的名称
- Linux rpm 命令参数使用详解[介绍和应用]