博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构型模式——装饰者设计模式
阅读量:3963 次
发布时间:2019-05-24

本文共 1800 字,大约阅读时间需要 6 分钟。

装饰模式指的是在不必改变原类文件和继承的情况下,动态地扩展一个对象的功能。

它是通过创建一个包装对象,也就是装饰来包裹真实的对象,比如处理流。

应用场景:需要扩展一个类的功能,或给一个类添加附加职责。

优点就是耦合性低,重用性高(高内聚,低耦合)。

案例分析

  • 抽象类ReadFile,用来读取文件,里面有一个抽象方法read
  • 该抽象类有三个子类,分别为读取文本文件类、读取音乐文件类和读取视频文件类
  • 现在提出了新的要求和功能:这三个子类必须各自增加缓冲机制功能,以提高读写效率

按照一般的方法,要么就是分别修改各自的read方法,要么就是再写3个子类去继承重写read,但继承本身就是高耦合的方式,会将父类有用没用的方法都继承过来,从而使程序臃肿。

这里最好的处理办法就是在类内创建父类对象,然后调用其某一个方法,保证高内聚,同时低耦合,也就是装饰者模式。

//ReadFile抽象类public abstract class FileRead {
abstract void read();}//读取文本文件类public class FileTextRead extends FileRead {
String name = "文本"; @Override void read() {
System.out.println(name + "文件直接读取....."); }}//读取音乐文件类public class FileMusicRead extends FileRead {
String name = "音乐"; @Override void read() {
System.out.println(name + "文件直接读取......."); }}//读取视频文件类public class FileVedioRead extends FileRead {
String name = "视频"; @Override void read() {
System.out.println(name + "文件直接读取,......"); }}/*** 缓冲类,同样继承ReadFile类,但是里面创建了父类对象,可以传入其三个子类对象* 实现了三个子类各自功能的同时还增加了缓冲机制*/public class BufferdFileRead extends FileRead {
private FileRead fileRead; //这里会实现多态 public BufferdFileRead(FileRead fileRead) {
this.fileRead = fileRead; } @Override void read() {
//这个read方法是缓冲类自己的read fileRead.read(); //这个read是传入的FileRead类对象或者其子类对象的read方法 System.out.println("缓存。。。。。"); }}//测试类public class test {
public static void main(String[] args) {
FileTextRead fileTextRead = new FileTextRead(); FileMusicRead fileMusicRead = new FileMusicRead(); FileVedioRead fileVedioRead = new FileVedioRead(); new BufferdFileRead(fileTextRead).read(); new BufferdFileRead(fileMusicRead).read(); new BufferdFileRead(fileVedioRead).read(); }}

这种模式,重点在于其设计结构。

转载地址:http://cxgzi.baihongyu.com/

你可能感兴趣的文章
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>
P4-c++函数详解-04函数重载,函数模板和函数模板重载,编译器选择使用哪个函数版本?
查看>>
P5-c++内存模型和名称空间-01头文件相关
查看>>
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>
P9-c++对象和类-02构造函数和析构函数总结
查看>>
P10-c++对象和类-03this指针详细介绍,详细的例子演示
查看>>
[心情] 如果有一天
查看>>
[Linux] 常用 linux 系统命令及维护备忘
查看>>
[Linux] 关于 Ext4 HowTo
查看>>
[杂记] 新年物语&关于Mysql引擎性能测试
查看>>
[HTML5] 关于HTML5(WebGL)的那点事
查看>>
自我反思
查看>>
初识网络编程
查看>>
东北赛选拔教训
查看>>
hash
查看>>