定义
装饰器模式,是一种结构型设计模式,它允许将一个现有的对象添加新的功能,同时又不改变其结构。
这种类型的设计模式作为现有类的一个包装。
UML 类图
typescript 实现
1. 定义组件接口
interface Component {
execute(): void;
}
2. 创建具体组件类
class ConcreteComponent implements Component {
public execute(): void {
console.log("ConcreteComponent");
}
}
3. 创建装饰器类
abstract class Decorator implements Component {
protected component: Component;
constructor(component: Component) {
this.component = component;
}
public execute():void {
this.component.execute();
}
}
4. 创建具体装饰器类
class ConcreteDecoratorA extends Decorator {
public execute() {
console.log("decorating A");
super.execute();
}
}
class ConcreteDecoratorB extends Decorator {
public execute() {
console.log("decorating B");
super.execute();
}
}
通用实现
// 公共代码
abstract class Decorator<T> {
protected component: T;
constructor(component: Component) {
this.component = component;
}
}
// 私有代码,组件接口
interface Stream {
write(): void;
read(): void;
}
// 私有代码,具体组件类
class FileStream {
write() {
console.log("write file stream");
}
read() {
console.log("read file stream");
}
}
class NetStream {
write() {
console.log("write net stream");
}
read() {
console.log("read net stream");
}
}
// 私有代码,装饰器类(根据功能命名)
class CryptoStream extends Decorator<Stream> implements Stream {
constructor(stream: Stream) {
super(stream);
}
write() {
console.log("crypto stream");
this.component.write(); }
read() {
console.log("crypto stream");
this.component.read();
}
}
// 私有代码,示例
const cryptoNetStream = new CryptoStream(new NetStream());
cryptoNetStream.write();
const cryptoFileStream = new CryptoStream(new FileStream());
cryptoFileStream.read();