当前位置: 首页 > 后端技术 > Java

装饰器模式

时间:2023-04-01 14:28:50 Java

允许在不改变现有对象结构的情况下,动态地为其添加新的功能,相当于对现有对象进行包装,因此装饰器模式也称为包装模式。在装饰器模式中,抽象组件一般有四种作用:具体组件和抽象装饰器的公共父类,最基本的组件具体组件:实现抽象构造中声明的方法,装饰器可以添加对它的附加职责抽象装饰Decorator:继承抽象组件,可以通过构造方法引入具体组件。它的作用主要是结合特定的组件。具体装饰器:继承抽象装饰器,对组件进行不同的装饰。下面以装饰汽车为例,实现装饰器模式publicinterfaceCar{/***cardescription*/voiddescribe();}car下有两个具体的实现类,分别代表燃油车和新能源车publicclassEnergyCarimplementsCar{@Overridepublicvoiddescribe(){System.out.print("新能源汽车");}}publicclassFuelCarimplementsCar{@Overridepublicvoiddescribe(){System.out.printf("FuelCar");}}汽车颜色装饰抽象类publicclassCarColorDecoratorimplementsCar{privatefinalCarcar;publicCarColorDecorator(Carcar){this.car=car;}@Overridepublicvoiddescribe(){car??.describe();}}具体汽车颜色的抽象类,然后可以在其中组合相应的组件publicclassCarColorDecoratorimplementsCar{privatefinalCarcar;publicCarColorDecorator(Carcar){this.car=car;}@Overridepublicvoiddescribe(){car??.describe();}}具体汽车颜色的实现类,修改相应的方法增加函数publicclassCarRedColorDecoratorextendsCarColorDecorator{publicCarRedColorDecorator(Carcar){sup呃(汽车);}@Overridepublicvoiddescribe(){System.out.printf("red");超级描述();}}测试公共类DecoratorTest{@Testpublicvoidtest(){Carcar=newCarRedColorDecorator(newFuelCar());汽车.描述();}}=====结果=====上面的红色燃油车看起来和decorator模式和bridge模式很像,那么到底这两种模式有什么区别呢?桥接模式就是让两个抽象的具体实现可以自由组合,在一个抽象类中引入另一个抽象类。通过抽象类之间的“桥梁”,为其子类之间的相互协作提供了便利。在装饰者模式中,一个抽象就是另一个抽象子类,其主要目的是让装饰者抽象类的实现类去装饰被装饰抽象类的实现类。桥接是通过抽象类的组合来实现的,装饰器是通过抽象之间的组合+继承来实现的,桥接相对来说耦合度较低。