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

    
    
  • 相关阅读:
    JS 创建对象的几种方式
    JS跨域笔记
    HTML5随笔
    css3随笔
    CSS3最简洁的轮播图
    canvas createRadialGradient 用法
    git 初级
    Oracle数据库字符集与国家字符集
    连接Oracle 19c出现ORA-28040:没有匹配的验证协议
    Vmware workstation虚拟机导入到esxi虚拟机
  • 原文地址:https://www.cnblogs.com/kelly-one/p/7860120.html
Copyright © 2011-2022 走看看