定义
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。也就是动态地给一个对象添加一些额外的职责。
例子
我们用装修房子为例子,一开始是空房子,房子可以刷上墙漆,添上家具,变成了精装房子。
public interface IHouse {
void house();
}
public class House implements IHouse{
@Override
public void house() {
System.out.println("空房子");
}
}
装饰器
public class HouseDecorator implements IHouse {
private IHouse house;
public HouseDecorator(IHouse house) {
this.house = house;
}
@Override
public void house() {
house.house();
}
}
public class FurnitureHouse extends HouseDecorator {
FurnitureHouse(IHouse house) {
super(house);
}
private void furniture() {
System.out.println("装上家具");
}
@Override
public void house() {
super.house();
furniture();
}
}
public class BrushPaintHouse extends HouseDecorator {
BrushPaintHouse(IHouse house) {
super(house);
}
private void brushPaint() {
System.out.println("刷上墙漆");
}
@Override
public void house() {
super.house();
brushPaint();
}
}
测试类
public class DecoratorPatternTest {
public static void main(String[] args) {
House house = new House();
house.house();
BrushPaintHouse brushPaintHouse = new BrushPaintHouse(house);
brushPaintHouse.house();
FurnitureHouse sofaHouse = new FurnitureHouse(brushPaintHouse);
sofaHouse.house();
}
}
执行结果