首页 > 其他 > 详细

装饰者模式

时间:2017-11-19 16:25:14      阅读:237      评论:0      收藏:0      [点我收藏+]
需求:A公司有汽车和单车修理员,为了保证服务质量,A公司要求员工在去客户家里服务时,开始说一句:“你好”
需设计一个装饰类,用来实现这个事情
//总公司
public interface Worker {
public void doSomeWorker();
}

//A公司从总公司那接业务,派相关的人员去完成工作
public class AWorker implements Worker {
private Worker worker;
public AWorker(Worker worker){//根据所派的实际员工为其加“你好”功能
this.worker=worker;
}
@Override
public void doSomeWorker() {
System.out.println("你好");
worker.doSomeWorker();
}
}

//修汽车的工人
public class Car implements Worker {
@Override
public void doSomeWorker() {
System.out.println("修汽车");
}
}
//修单车的工人
public class Bike implements Worker {
@Override
public void doSomeWorker() {
System.out.println("修单车");
}
}
如果需要汽车工人,输出为:你好,修汽车
上述装饰者为AWorker类,被装饰者为Car和Bike,Aworker为Car和Bike增加了“你好”功能。


上述就是一个简单的装饰者设计模式,AWorker为装饰类,AWorker和Car、Bike类都实现了Worker接口。在java中,I/O中的节点流和处理流也是采用的“装饰者设计模式”
示例:public static void main(String[] args) { FileReader fileReader=null;//节点流
    FileWriter fileWriter=null;
BufferedWriter bufferedWriter=null;
BufferedReader bufferedReader=null;//处理流
try{
fileReader =new FileReader("e:/a.txt");
bufferedReader=new BufferedReader(fileReader);
String s = bufferedReader.readLine();
fileWriter=new FileWriter("e:/b.txt");
bufferedWriter=new BufferedWriter(fileWriter);
while (true){
if(s==null){
break;
}
bufferedWriter.write(s);
bufferedWriter.flush();
}
}catch (Exception e){
System.out.println("文件读取失败");
}finally {
try{
fileReader.close();
fileWriter.close();
bufferedReader.close();
bufferedWriter.close();
}catch (Exception e){
System.out.println("文件关闭异常");
}
}
}

注意: FlieReader和BufferedReader的关系

FlieReader是被装饰者,作为参数传递给装饰者

BufferedReader是装饰者,在被装饰者的功能基础上再添加功能,在此处使用BufferedReader处理流,可以使用readLine()方法,一次可以读取一行数据。(原来一次只能读取一个字符)

装饰者模式

原文:http://www.cnblogs.com/kelly-one/p/7860120.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!