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

    
    
  • 相关阅读:
    The Quad
    将OrCAD Capture CIS的设计文件(.dsn)导入到PADS Logic VX.2.3
    OrCAD Capture CIS 16.6 将版本16.6的设计文件另存为版本16.2的设计文件
    Eclipse IDE 添加jar包到Java工程中
    PADS Logic VX.2.3 修改软件界面语言
    切换Allegro PCB Editor
    Allegro PCB Design GXL (legacy) 将brd文件另存为低版本文件
    Allegro PCB Design GXL (legacy) 设置自动保存brd文件
    Could not create an acl object: Role '16'
    windows 下apache开启FastCGI
  • 原文地址:https://www.cnblogs.com/kelly-one/p/7860120.html
Copyright © 2011-2022 走看看