1.为什么要使用装饰模式
装饰模式,就是对原有的业务方法进行一些装饰,听起来和代理模式十分相似。但还是有一点区别的,代理模式的本质是完全交给代理模式去做(至少思想上是这样的),但是装饰模式是对原业务方法的扩展,封装等。
2.类图
以房间为例,房间要有床,我们对房间进行装饰,女孩的房间要有镜子,所以我们可以用镜子对女孩的房间进行装饰,(同理,男孩的房间要有电脑,那么可以用电脑对房间进行装饰)
3.实现
room类
public abstract class Room {
public abstract void bed();
}
public class GirlRoom extends Room{
@Override
public void bed() {
System.out.println("I have a bed");
}
}
装修类
public abstract class Decorator extends Room{
//为哪个room进行装饰
private Room room;
public Decorator(Room room) {
this.room = room;
}
@Override
public void bed(){
this.room.bed();
}
}
public class MirrorRoom extends Decorator{
public MirrorRoom(Room room) {
super(room);
}
@Override
public void bed() {
System.out.println("I have a mirror");
super.bed();
}
}
main方法
public class Main {
public static void main(String[] args) {
Room room = new GirlRoom();
room.bed();
room = new MirrorRoom(room);
room.bed();
}
}
//输出结果
I have a bed
I have a mirror
I have a bed