zoukankan      html  css  js  c++  java
  • 前端设计模式 装饰器模式

    装饰器模式:为对象添加新功能,不改变其原有的结构和功能
    适配器模式是原有的不能用了,要重新封装接口。装饰器模式是原有的还能用,但是需要新增一些东西来完善这个功能
    比如手机壳,手机本身的功能不受影响,手机壳就是手机的装饰器模式
     
    uml类图
    代码
    class Circle {
        draw() {
            console.log('画一个圆形');
        }
    }
    
    class Decorator {
        constructor(circle) {
            this.circle = circle;
        }
        draw() {
            this.circle.draw();
            this.setRedBorder(circle);
        }
        setRedBorder(circle) {
            console.log('设置红色边框')
        }
    }
    
    // 测试
    let circle = new Circle();
    
    let client = new Decorator(circle);
    client.draw();



    使用场景
    ES7装饰器
    1、安装 yarn add babel-plugin-transform-decorators-legacy
    2、.babelrc
    {
        "presets": ["es2015", "latest"],
        "plugins": ["transform-decorators-legacy"]
    }
    3、代码
    // 一个简单的demo
    @testDec
    class Demo {
        // ...
    }
    
    function testDec(target) {
        target.isDec = true
    }
    
    alert(Demo.isDec)
    打印出来了true,说明@testDec这个装饰器已经成功了,函数是个装饰器,用@testDec给Demo装饰了一遍。这个target其实就是class Demo,然后给她加一个isDec
    // 装饰器原理
    @decorator
    class A {}
    
    // 等同于
    class A {}
    A = decorator(A) || A;
    参数的形式
    @testDec(false)
    
    class Demo {
    }
    
    function testDec(isDec) {
        return function (target) {
            target.isDec = isDec
        }
    }
    
    alert(Demo.isDec);
    设计原则验证
    将现有对戏那个和装饰器进行分离,两者独立存在
    符合开放封闭原则
  • 相关阅读:
    我拒绝接受的几个最佳编程实践方法
    女人千万别写代码
    Visual Studio原生开发的10个调试技巧(二)
    20个很有用的PHP类库
    8个开发必备的PHP功能
    青少年如何使用 Python 开始游戏开发
    rmdir 删除空目录
    rm 删除文件或目录
    mv 移动或重命名文件
    cp 复制文件或目录
  • 原文地址:https://www.cnblogs.com/wzndkj/p/11785276.html
Copyright © 2011-2022 走看看