TypeScript | 设计模式09 - 装饰者模式

简介: 装饰模式又称为包装模式,对象被包装后,还可以继续包装添加新的功能,从而扩展对象的功能,通过装饰模式可以使系统更具有弹性,且其遵循了面向对象原则:对外开放,对修改关闭。

装饰者模式

动态的给一个对象扩展一些额外的功能,比如在调用对象之前或者之后增加新的功能,还不影响原对象本有的功能,就像是给对象增加了一些装饰。

装饰模式又称为包装模式,对象被包装后,还可以继续包装添加新的功能,从而扩展对象的功能,通过装饰模式可以使系统更具有弹性,且其遵循了面向对象原则:对外开放,对修改关闭。

普通JS实现装饰模式

var House = {
    style : function() {
        console.log('普通房子')
    }
}
​
var treeDecorator = function (){
    console.log('周围有绿化')
}
​
let style = House.style;
House.style = function() {
    style();
    treeDecorator()
};
​
House.style();

其中,重写style 方法,将原来的style和treeDecorator重新包装,然后赋值给House对象的style属性,增加原有style的功能。

基于TypeScript 的装饰器的功能

TypeScript 中的装饰器使用 @expression 这种形式,expression 求值后为一个函数,它在运行时被调用,被装饰的声明信息会被做为参数传入。

let template;
function checkCar(target, key, descriptor) {
    console.log('before checking');
    template = target;
}
​
function CloseCar(target, key, descriptor){
    console.log('close car');
    template = target;
}
​
class CarModel {
    @checkCar
    driver() {
        console.log('moving')
    }
​
    @CloseCar
    stop() {
        console.log('stop...')
    }
}
​
const car = new CarModel();
car.driver();

但是需要注意,需要开启对装饰器的支持,

  • 命令行编译文件:

    • tsc --target ES5 --experimentalDecorators demo.ts
  • 通过增加配置文件

    • {
          "compilerOptions": {
              "target": "ES5",
              "experimentalDecorators": true
          }
      }

装饰器使用

  • 在需要装饰的类,方法或属性上增加 @符号+ 方法
  • 支持多个装饰,执行顺序将按 从下到上 依此执行
  • 可支持装饰器:类、方法、属性、访问符装饰器,参数装饰器
  • 若都存在以上几种装饰器,那么这些访问器的顺序是,属性装饰器 -> 访问符装饰器 -> 方法装饰器 -> 参数装饰器 -> 类装饰器。

优点

  • 比继承灵活,动态对对象扩展,即插即用
  • 通过使用不同的装饰类及这些装饰类的排列组合,可以实现不同效果
  • 完全遵守开闭原则

应用场景

  • 当需要给现有类增加附加职责,而又不能采用生成子类的方法进行扩充时
  • 当需要通过对现有的一组基本功能进行排列组合而产生非常多功能时
  • 当对象的功能要求可以动态添加,也可以再动态地撤销时
目录
相关文章
|
8月前
|
设计模式 Java
Java设计模式【十】:装饰者模式
Java设计模式【十】:装饰者模式
57 0
|
1月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
44 2
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
|
2月前
|
设计模式 Java Kotlin
Kotlin - 改良设计模式 - 装饰者模式
Kotlin - 改良设计模式 - 装饰者模式
33 4
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
|
3月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
45 0
|
3月前
|
设计模式 Java Kotlin
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
38 0
|
3月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
25 0
|
7月前
|
设计模式 Java API
程序技术好文:设计模式:装饰者模式
程序技术好文:设计模式:装饰者模式
32 0
|
8月前
|
设计模式 Java
【设计模式系列笔记】装饰者模式
装饰者模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装类中来为原始对象添加新的行为。这种模式可以动态地将责任附加到对象上,而不影响其它对象。
78 11

热门文章

最新文章

  • 1
    设计模式转型:从传统同步到Python协程异步编程的实践与思考
    64
  • 2
    C++一分钟之-设计模式:工厂模式与抽象工厂
    55
  • 3
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    63
  • 4
    C++一分钟之-C++中的设计模式:单例模式
    79
  • 5
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    49
  • 6
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    81
  • 7
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    70
  • 8
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    54
  • 9
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    63
  • 10
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    137