装饰器和外观设计模式

装饰器模式

参考文章:
《软件设计模式概述》
《设计模式之美》——极客时间·王争

一、概念

我们有一个文件读取功能,可以读取磁盘上的文本类文件、音乐类文件以及视频类文件。

后来,我们觉得读取速度很慢,与磁盘交互太多,想将现有的读取功能增强,增加缓冲区。

FileRead功能(Old) FileRead功能(New)
在这里插入图片描述 在这里插入图片描述

这种改进措施有很大弊端,复用性很低,需要改进。

改进后结构图 在这里插入图片描述
装饰器模式结构图(简约版) 在这里插入图片描述

装饰器设计模式:通过创建一个包装对象,也就是装饰来包裹真实的对象,从而增强一个类的功能

角色说明:

1、Component 是统一接口,也是装饰类和被装饰类的基本类型

2、ConreteComponent 是具体实现类,也是被装饰类,本身就是个具有一些功能的完整类

3、ConcreteDecorator是具体的装饰产品类,实现了Component接口的同时还在内部维护了一个Component实例,通过构造函数初始化,每一种装饰产品都具有特定的装饰效果,可以通过构造器来声明装饰哪种类型Component,从而对其装饰。

//ReadFile抽象类
public abstract class FileRead {
   
    public abstract void read();
}

//读取文本文件类
public class FileTextRead extends FileRead {
   
    String name = "文本";
    @Override
    public void read() {
   
        System.out.println(name + "文件直接读取.....");
    }
}

//读取音乐文件类
public class FileMusicRead extends FileRead {
   
    String name = "音乐";
    @Override
    public void read() {
   
        System.out.println(name + "文件直接读取.......");
    }
}

//读取视频文件类
public class FileVedioRead extends FileRead {
   
    String name = "视频";
    @Override
    public void read() {
   
        System.out.println(name + "文件直接读取,......");
    }
}

/**
* 缓冲类,同样继承ReadFile类,但是里面创建了父类对象,可以传入其三个子类对象
* 实现了三个子类各自功能的同时还增加了缓冲机制
*/
public class BufferdFileRead extends FileRead {
   
    private FileRead fileRead;
	
	//这里会实现多态
    public BufferdFileRead(FileRead fileRead) {
   
        this.fileRead = fileRead;
    }

    @Override
    public void read() {
   	
        //这个read方法是缓冲类自己的read
        //这个read是传入的FileRead类对象或者其子类对象的read方法
        fileRead.read();	
        System.out.println("缓存。。。。。");
    }
}

//测试
public class test {
   
    public static void 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值