一、概述
装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能。装饰者类需要实现抽象接口并引入抽象接口的实例。
二、初步分析
上面提到了两点:
- 涉及的是单方
- 目标是抽象的
解决单方提供对外服务的问题,单方在自行对外提供服务时,功能不足,我们需要额外添加一些新功能,这时就可以使用装饰器模式,来对这个单方进行增强。
目标抽象的意思是因为我们需要通过实现接口的方式来进行增强,因此目标必须抽象为接口。
三、实例
下面我们用我们生活中的一个例子来说明,我们用房子来作为目标:
房子接口:House
/**
* 目标接口:房子
*/
public interface House {
void output();
}
具体的房子:董浩的房子
/**
* 房子实现类
*/
public class DonghaoHouse implements House {
@Override
public void output() {
System.out.println("这是董浩的房子");
}
}
具体的房子:董量的房子
/**
* 房子实现类
*/
public class DongliangHouse implements House {
@Override
public void output() {
System.out.println("这是董量的房子");
}
}
装饰器:Decorator
public class Decorator implements House {
private House house;
public Decorator(House house){
this.house = house;
}
@Override
public void output() {
System.out.println("这是针对房子的前段装饰增强");
house.output();
System.out.println("这是针对房子的后段装饰增强");
}
}
测试类:
public class Clienter {
public static void main(String[] args) {
House donghaoHouse = new DonghaoHouse();
House decorator = new Decorator(donghaoHouse);
decorator.output();
}
}
执行结果为:
这是针对房子的前段装饰增强
这是董浩的房子
这是针对房子的后段装饰增强
四、解析
只有目标是抽象的,才可以使用装饰器模式来进行增强。