美文网首页
装饰模式例子

装饰模式例子

作者: xiao_xian | 来源:发表于2021-07-03 11:20 被阅读0次

装饰模式通过在调用实际具体组件之前添加额外的功能,通过聚合或组合的方式将不同的功能组合在一起。
伪代码例子:

// 将功能点划分为基本组件及多个额外可选层次(装饰)
// 提取基本组件公共方法,定义接口
interface DataSource is
    method writeData(data)
    method readData():data

// 具体组件提供操作的具体实现(可扩展多个)
class FileDataSource implements DataSource is
    constructor FileDataSource(fileName) {...}

    method writeData(data) is
        // 将数据写入文件

    method readData():data is
        // 从文件读出数据

// 定义装饰基类,同样实现公共接口方法,同时装饰基类包含一个被封装组件的成员变量
class DataSourceDecorator implements DataSource is
    protected field wrappee: DataSource

    constructor DataSourceDecorator(dataSource: DataSource) is
        wrappee = dataSource

    // 装饰基类直接将所有工作分配给被封装组件
    method writeData(data) is
        wrappee.writeData(data)

    // 具体装饰可调用其父类的操作实现,而不是直接调用被封装对象
    method readData():data is
        return wrappee.readData()

// 定义具体装饰类,可以按照不同的额外功能定义不同的具体装饰类
class CompressionDecorator extends DataSourceDecorator is
    method writeData(data) is
        // 压缩数据
        ...
        // 调用装饰基类方法写入数据
        super::writeData(data)

    method readData():data is
        // 调用装饰基类方法读取数据
        data = super::readData()
        // 解压并返回数据
        ...

// 还可以定义其他不同功能具体装饰类
class xxxDecorator extends DataSourceDecorator is
    ...

// client调用示例1:装饰组件的简单示例
class Application is
    method dumbUsageExample() is
        source = new FileDataSource("somefile.dat")
        source.writeData(salaryRecords)
        // 已将明码数据写入目标文件

        source = new CompressionDecorator(source)
        source.writeData(salaryRecords)
        // 已将压缩数据写入目标文件

// 选项 2:客户端使用外部数据源。SalaryManager(工资管理器)对象并不关心
// 数据如何存储。它们会与提前配置好的数据源进行交互,数据源则是通过程序配
// 置器获取的
class SalaryManager is
    field source: DataSource

    Constructor SalaryManager(source: DataSource) {this.source=source}

    method load() is
        return source.readData()

    method save(data) is
        source.writeData(data)

// 根据配置或环境组装不同的装饰堆桟
class ApplicationConfigurator is
    method configurationExample is
        source = new FileDataSource(fileName)
        if (enabledCompression) 
            source = new CompressionDecorator(source)

        dataManager = new SalaryManager(source)
        data = dataManager.load()

相关文章

  • 装饰模式例子

    装饰模式通过在调用实际具体组件之前添加额外的功能,通过聚合或组合的方式将不同的功能组合在一起。伪代码例子:

  • 设计模式--代理模式、装饰者模式和继承的区别

    一、代理模式和装饰者模式还记得装饰者模式那个开咖啡店的例子吗?装饰者类图: 同样开咖啡店,使用代理模式,那么类图是...

  • 装饰器模式

    装饰器模式 装饰器模式中主要有两个角色: 装饰器; 被装饰的对象。用老王买装备的例子来说,老王就是被装饰的对象,而...

  • Java设计模式之 —— 装饰者(Decorator) — 点

    Java设计模式之 —— 装饰者(Decorator) — 点炒饭 下面会用做炒饭的例子来描述一下装饰者设计模式,...

  • Android 设计模式 - 装饰器模式

    简介 在现实生活中可以看到很多装饰模式的例子,或者可以大胆的说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,...

  • Android源码设计模式学习笔记-装饰器模式

    在现实生活中可以看到很多装饰模式的例子,或者可以大胆的说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,不管你...

  • 装饰者模式(Decorator Pattern)——1. 实现及

    写在前面 本文介绍装饰者模式,使用Java实现。首先以一个例子入手直接上手使用装饰者模式,然后再就原理进行讲解。 ...

  • 不学无数——装饰模式

    装饰模式 在开始之前 我们可以用一个简单的例子引出来装饰模式,在小的时候,相信大家都有过这样的经历:小学每年会有好...

  • 装饰者(Decorator)模式

    装饰者(Decorator)模式装饰模式又名包装(Wrapper)模式。装饰模式是继承关系的一个替代方案。装饰模式...

  • 11.4设计模式-装饰模式-讲解

    设计模式-装饰模式 装饰模式详解 装饰模式在android中的实际运用,避免了耦合 1. 装饰模式详解 2.装饰模...

网友评论

      本文标题:装饰模式例子

      本文链接:https://www.haomeiwen.com/subject/ihsuultx.html