当前位置: 首页 > 科技观察

这是我见过最通俗易懂的装饰者模式讲解!

时间:2023-03-19 22:29:51 科技观察

1。什么是装饰者模式?动态地向对象添加函数。从对象外部给对象添加函数,相当于改变了对象的外观,比继承更灵活。当装饰器被使用时,从外部系统的角度来看,它不再是原来的对象,而是经过一系列装饰器装饰的对象。2.结构角色:Component:组件对象的抽象接口,可以动态地为这些对象添加职责/功能。ConcreteComponent:具体组件的对象,它实现了组件对象的接口,是装饰器装饰的原始对象,即可以动态地为这个对象添加职责。Decorator:所有装饰器的抽象父类,实现了组件对象的接口,持有一个组件对象(被装饰的对象)。ConcreteDecorator:具体的装饰器,实现为被装饰对象添加功能。3.示例下面我们使用装饰器模式实现以下功能:More:DesignPatternAggregation要求用户输入一段文字,比如HelloMe,然后在屏幕上输出几个选项。最多10个字符,不足的部分!补充用户输入的任意组合,比如1、3表示先执行1的逻辑,再执行3的逻辑。根据用户输入的选择,处理后,输出结果//组件对象的接口publicinterfaceICompoment{Stringdisplay(Stringstr);}//具体组件对象publicclassDetailCompomentimplementsICompoment{@OverridepublicStringdisplay(Stringstr){System.out.println("原文内容:"+str);returnstr;}}//所有装饰器的父类都实现了组件接口publicabstractclassDecoratorimplementsICompoment{//持有一个组件对象protectedICompomentcompoment;publicDecorator(ICompomentcompoment){this.compoment=compoment;}@OverridepublicStringdisplay(Stringstr){returncompoment.display(str);}//装饰组件对象的抽象方法publicabstractStringtransform(Stringstr);}//加解密工具publicclassEnDecodeUtil{privatestaticfinalcharpassword='a';publicstaticStringencodeDecode(Stringstr){char[]chars=str.toCharArray();for(inti=0;i10){returnstr.substring(0,10);}else{intrepeatCount=10-str.length();StringBuildersb=newStringBuilder(str);for(inti=0;i10){returnstr.substring(0,10);}else{intrepeatCount=10-str.length();StringBuildersb=newStringBuilder(str);for(inti=0;i