博客
关于我
装饰模式(包装模式)—结构型
阅读量:510 次
发布时间:2019-03-07

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

设计模式是软件开发中的重要概念,主要用于解决常见问题,提高代码复用性和可维护性。常见的设计模式包括创建型、结构型和行为型三大类。通过深入理解结构型模式,可以发现这一类模式的核心思想是将复杂的功能分解为多个简单组件的组合,从而简化系统设计。

结构型模式简介

结构型模式总结了一些常见的对象或类组合的典型结构,能够高效解决特定的应用场景问题。最典型的结构型模式包括代理模式、桥接模式、装饰器模式、适配器模式等。这些模式通过组合的方式,避免直接使用继承,从而降低了代码的耦合度。

装饰模式详解

装饰模式(Decorator Pattern)是一种常见的设计模式,其核心思想是通过组合而非继承来扩展对象功能。装饰模式灵活性极高,适用于需要向现有类添加功能或改变行为的场景。在实际应用中,便于干净地扩展代码,而无需不断地加新继承类。

生活中的装饰模式

装饰模式在生活中比比皆是。例如,无论是我们的电器包装还是日常服装,都在通过不同的装饰方式展现出独特的个性。更贴近技术领域,Java IO流中的 BufferedReader、BufferedWriter 等类都是装饰模式的典型应用,它们为数据读写操作提供了缓冲功能,显著提升了性能和用户体验。

装饰模式的典型场景

在IO操作中,装饰模式通过在数据流周围包装功能,实现对流的优化和扩展。比如:

  • BufferedReader 是对 InputStream 进行装饰,添加了读取缓冲功能。
  • BufferedOutputStream 是对 OutputStream 的装饰,实现了写数据的缓冲。

Java源码分析

以 Java 的 BufferedReader 为例,看看其背后的实现:【 cruisuobrane 的评论】

public class BufferedReader implements Reader {    private InputStream reader;    public BufferedReader(InputStream reader) {        this.reader = reader;    }    public BufferedReader(InputStream reader, int buffer_size) {        this.reader = reader;        this.buffer = new char[buffer_size];    }    public void close() throws IOException {        if (reader != null) {            reader.close();            reader = null;        }    }    public int read() throws IOException {        synchronized (lock) {            if (reader == null) {                return -1;            }            return reader.read();        }    }    // 其他读取方法}

从代码可以看出, BufferedReader 维护了一个 InputStream 的引用,并通过读取操作实现了缓冲功能。

Android源码中的装饰模式

在 Android 开源项目中,装饰模式广泛应用于应用程序的上下文管理。例如,Context 类作为结构型模式的核心,通过装饰模式扩展了丰富的功能,如资源管理、服务启动等。【 cruisuobrane 的评论 ]Context 类提供了与系统服务交互的接口,具体实现通过继承和装饰模式结合实现。

ContextImpl 类的实现

ContextImpl 作为 Context 的具体实现类,扩展了系统服务的启动和管理功能。

class ContextImpl extends Context {    @Override    public ComponentName startService(Intent service) {        return startServiceCommon(service, false, mUser);    }    // 其他方法...}

通过 startServiceCommon 方法的调用,ContextImpl 提供了跨进程的服务启动功能。

ContextWrapper 类的应用

ContextWrapper 类是装饰模式的典型应用,它通过将不同的视图系统(如 XML 转换为 View)为应用程序提供统一接口。

class ContextWrapper extends Context {    private final Context mBase;    public ContextWrapper(Context base) {        mBase = base;    }    @Override    public ComponentName startService(Intent intent) {        return mBase.startService(intent);    }    // 其他方法...}

ContextWrapper 的设计清晰地展示了装饰模式——通过使用已有的 Context 实现,轻松扩展功能。

总结

在设计模式中,装饰模式通过组合和透_unregister_for_moving_the_component_off_the_stack_pril表示增强功能,而无需直接修改对象。这种设计理念在 IO 操作、资源管理等领域显得尤为重要。在 Java 和 Android 的源码中,装饰模式的应用更是体现了其高效和可维护的特点。这一模式不仅便于代码扩展,还能减少代码的复杂性。

通过对装饰模式的掌握,可以更好地理解和优化 Java 应用程序的 IO 操作或资源管理逻辑,大大提升代码的质量和性能表现。

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

你可能感兴趣的文章
Objective-C实现两个栈实现队列算法(附完整源码)
查看>>
Objective-C实现两个队列实现栈算法(附完整源码)
查看>>
Objective-C实现两数之和问题(附完整源码)
查看>>
Objective-C实现中介者模式(附完整源码)
查看>>
Objective-C实现中值滤波(附完整源码)
查看>>
Objective-C实现中国剩余定理(附完整源码)
查看>>
Objective-C实现中国剩余定理(附完整源码)
查看>>
Objective-C实现中文模糊查询(附完整源码)
查看>>
Objective-C实现串口通讯(附完整源码)
查看>>
Objective-C实现串逐位和(附完整源码)
查看>>
Objective-C实现串链式存储简单匹配(附完整源码)
查看>>
Objective-C实现主存储器空间的分配和回收(附完整源码)
查看>>
Objective-C实现乘方运算---m的n次方(附完整源码)
查看>>
Objective-C实现乘法持续性multiplicative persistence算法(附完整源码)
查看>>
Objective-C实现二分查找最接近的数值m(附完整源码)
查看>>
Objective-C实现二分查找最接近的数值m(附完整源码)
查看>>
Objective-C实现二叉搜索树算法(附完整源码)
查看>>
Objective-C实现二叉树层序遍历(附完整源码)
查看>>
Objective-C实现二叉树遍历算法(附完整源码)
查看>>
Objective-C实现二次方程复数算法(附完整源码)
查看>>