zoukankan      html  css  js  c++  java
  • 装饰者模式

    需求: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()方法,一次可以读取一行数据。(原来一次只能读取一个字符)

    
    
  • 相关阅读:
    hdu1313 Round and Round We Go (大数乘法)
    select样式控制
    tp5 分页后追加数据方法
    tp5请求类型
    layui 参数祥解
    jquery 阻止label冒泡
    svn的配置
    destoon 根目录文件结构
    关于jquery中on绑定click事件在苹果手机失效的问题
    正则表达式中的match,test,exec,search的返回值
  • 原文地址:https://www.cnblogs.com/kelly-one/p/7860120.html
Copyright © 2011-2022 走看看