装饰器设计模式具体组成部分:
一.抽象组件:需要装饰的抽象对象(接口或抽象父类 )
二.具体组件:需要装饰的对象
三.抽象装饰类:包含了对抽象组件的引用 以及共有的方法
四.具体装饰类:装饰后的对象,抽象装饰类的子类
实例:
/*抽象组件*/
public interface Icar {
void move();
}
/*具体组件*/
class Car implements Icar{
@Override
public void move() {
System.out.println("汽车行驶");
}
}
/*抽象装饰类*/
class SuperCar implements Icar{
protected Icar car;
public SuperCar(Icar car) {
this.car = car;
}
@Override
public void move() {
car.move();
}
}
/*两个具体装饰类*/
class AICar extends SuperCar {//继承抽象装饰类
public AICar(Icar car) {
super(car);
}
public void automove(){
System.out.println("自动驾驶");
}
@Override
public void move() {
super.move();
automove();
}
}
class WaterCar extends SuperCar {
public WaterCar(Icar car) {
super(car);
}
public void swim(){
System.out.println("水下驾驶");
}
@Override
public void move() {
super.move();
swim();
}
}
最后在客户端实现装饰器模式:
public class client {
public static void main(String[] args) {
Car car=new Car();
AICar aiCar=new AICar(car);
WaterCar waterCar=new WaterCar(aiCar);
waterCar.move();
}
}
意义:
装饰器模式降低系统耦合度,动态增加删除对象职责,可以创造不同行为组合,且不会导致类个数急剧增加。
装饰器模式的典型例子:IO流,Servlet API
区分:
装饰模式为了增加新功能,桥接模式是解决一个系统有多个变化维度。
从实现上看桥接模式中抽象类只包含一个实现类的引用,实现对实现类的调用。而装饰模式中抽象装饰类继承构件抽象类,并且还包含一个对抽象构建的引用