容许动静的向一个现有对象减少新性能,同时又不扭转它的构造,相当于对现有对象的一个包装,因而装璜器模式也被称作包装模式。
装璜器模式中个别存在以下四中角色
- 形象组件:具体组件和形象装璜器独特的父类,最根底的组件
- 具体组件:实现形象构建中申明的办法,装璜器能够给它减少额定的职责
- 形象装璜器:继承形象组件并且能够通过构造方法引入具体组件,它的作用次要是组合具体组件
- 具体装璜器:继承形象装璜器,给组件做不同的装璜。
上面应用一个装璜汽车的实例来实现一下装璜器模式
public interface Car { /** * 汽车形容 */ void describe();}
汽车上面有两个具体的实现类,别离代表燃油车和新能源车
public class EnergyCar implements Car{ @Override public void describe() { System.out.print("新能源汽车"); }}
public class FuelCar implements Car{ @Override public void describe() { System.out.printf("燃油车"); }}
汽车色彩装璜的抽象类
public class CarColorDecorator implements Car{ private final Car car; public CarColorDecorator(Car car) { this.car = car; } @Override public void describe(){ car.describe(); }}
具体汽车色彩的抽象类,再这外面能够组合相应的组件
public class CarColorDecorator implements Car{ private final Car car; public CarColorDecorator(Car car) { this.car = car; } @Override public void describe(){ car.describe(); }}
具体汽车色彩的实现类,对相应的办法进行润饰减少性能
public class CarRedColorDecorator extends CarColorDecorator{ public CarRedColorDecorator(Car car) { super(car); } @Override public void describe() { System.out.printf("红色的"); super.describe(); }}
测试
public class DecoratorTest { @Test public void test(){ Car car = new CarRedColorDecorator(new FuelCar()); car.describe(); }}=====后果=====红色的燃油车
以上看起来装璜器模式和桥接模式有十分大的相似性,那么到底这两种模式有什么区别呢?
- 桥接模式是为了让两个形象的具体实现可能进行自在的组合,而在某一个抽象类中引入了另一个抽象类,通过抽象类之间的“搭桥”,为其子类相互合作提供了不便。而装璜器模式中一个形象是另一个形象的子类,其要目标是为了让装璜器抽象类的实现类能够对被装璜的抽象类的实现类进行装璜。
- 桥接是通过抽象类的组合实现,装璜器是通过形象之间的组合+继承实现的,桥接绝对耦合性更低。