设计模式学习篇-装饰器模式

48 阅读1分钟

1. 概念

允许向一个现有的对象添加新的功能(动态地给一个对象添加额外的职责),同时又不改变其结构

2. 为什么使用装饰器模式

  • 继承关系过于复杂的,子类急剧膨胀的问题
  • 它主要的作用是给原始类添加增强功能。

3. 如何实现

一般游戏开发中文件的读取通常会使用装饰器模式来实现

interface IFileRead {
    read();
}

class FileRead implements IFileRead {
    read() {
        console.log('read');
    }
}

class FileReadDecorator implements IFileRead {
    private fileRead: FileRead;
    constructor(fileRead: FileRead) {
        this.fileRead = fileRead;
    }
    read() {
        // 功能增强
        console.log('decorator read before');
        this.fileRead.read();
        // 功能增强
        console.log('decorator read after');
    }
}

class AndroidFileReadDecorator implements IFileRead {
    private fileRead: FileRead;
    constructor(fileRead: FileRead) {
        this.fileRead = fileRead;
    }
    read() {
        // 功能增强
        console.log('decorator android read before');
        this.fileRead.read();
        // 功能增强
        console.log('decorator android read after');
    }
}

// 使用
const fileRead = new FileRead();
const fileReadDecorator = new FileReadDecorator(fileRead);
fileReadDecorator.read();
const androidFileReadDecorator = new AndroidFileReadDecorator(fileRead);
androidFileReadDecorator.read();

代码和代理模式很像,主要的区别是两者用途不同,装饰器是增强功能,代理模式是附加和原来无关的功能