zoukankan      html  css  js  c++  java
  • 16-TypeScript装饰器模式

    在客户端脚本中,有一个类通常有一个方法需要执行一些操作,当我们需要扩展新功能,增加一些操作代码时,通常需要修改类中方法的代码,这种方式违背了开闭的原则。

    装饰器模式可以动态的给类增加一些额外的职责。基本实现思路是:定义一个装饰类,这个装饰类来装饰新的功能,将新的功能代码移植到继承装饰类的子类中,而这个子类先

    调用装饰类的方法,紧接着实现自己的新功能,最后在客户端去显示装饰要调用哪些功能。代码如下:

    interface IPeople{
       do():void;
    }
    class People implements IPeople{
        public  do():void{
             console.log("Eat");
        }
    }
    
    class DecoratorPeople {
        protected people:IPeople;
        public SetPeople(ipeople:IPeople):void{
            this.people=ipeople;
        }
        public do():void{
            if(this.people){
                this.people.do();
            }
        }
    }
    
    class ProgrammerPeople extends DecoratorPeople {
        public do():void{
            super.do();
            console.log("Coding");
        }
    }
    
    class TesterPeople extends DecoratorPeople{
        public do():void{
            super.do();
            console.log("Testing");
        }
    }
    
    var p=new People();
    var pp=new ProgrammerPeople();
    var tp=new TesterPeople();
    pp.SetPeople(p);
    tp.SetPeople(pp);
    tp.do();

    解释:

    People中的方法是原始的一个基础实现,ProgrammerPeople与TestPeople两个从装饰类继承的子类是后期新功能的实现。

    在pp对象SetPeople(p)时,就将p传入了装饰类,tp对象SetPeople(pp)时,就将pp传入了装饰类,最后在调用tp.do方法时,就要逐级先执行上级传入的对象

    的do方法,从而实现了功能的扩展。

    欢迎加入QQ群讨论:573336726

  • 相关阅读:
    SQL创建索引
    SQLServer最耗资源时间的SQL语句
    C# Linq删除父级的同时删除子级
    C# 根据类名创建类的实例对象
    C#利用反射实现两个类的对象之间相同属性的值的复制
    linq时间筛选以及list时间筛选
    为什么watch机制不是银弹?
    我们的前端模版引擎更新总结
    小矮人Javascript模块加载器
    Javascript模版引擎简介
  • 原文地址:https://www.cnblogs.com/malaoko/p/7605313.html
Copyright © 2011-2022 走看看