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

    
    
  • 相关阅读:
    PAIP: Paradigms of Artificial Intelligence Programming
    Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee)
    悲惨世界
    Lisp: Common Lisp, Racket, Clojure, Emacs Lisp
    Github上四种Lisp方言的流行度 | 肉山博客 (Wenshan's Blog)
    Nginx系列~负载均衡服务器与WWW服务器的实现
    Nginx系列~Nginx服务启动不了
    知方可补不足~数据库名称和数据库别名不同了怎么办
    WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递
    WebApi系列~通过HttpClient来调用Web Api接口
  • 原文地址:https://www.cnblogs.com/kelly-one/p/7860120.html
Copyright © 2011-2022 走看看