在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在客户端脚本中,有一个类通常有一个方法需要执行一些操作,当我们需要扩展新功能,增加一些操作代码时,通常需要修改类中方法的代码,这种方式违背了开闭的原则。 装饰器模式可以动态的给类增加一些额外的职责。基本实现思路是:定义一个装饰类,这个装饰类来装饰新的功能,将新的功能代码移植到继承装饰类的子类中,而这个子类先 调用装饰类的方法,紧接着实现自己的新功能,最后在客户端去显示装饰要调用哪些功能。代码如下: 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 |
请发表评论