装饰器模式,这个模式真的很容易懂,啥叫装饰?
当然是你住进新房子了,要装修啊,
装饰是否必要?
当然不是必要的,你不装修,也可以住房子、、、只是。。。
为什么要装修?
装修了环境,舒服了,人也心情好了,当然高兴啊
装修改变了你的房子的结构了吗?
当然没有,你房子在哪里还是在哪里,墙难道在装修之后就变成不是墙了吗???
不知道,大家注意到上面这几个问题没有。
其实,装饰模式就是在原来基础上,增加一些新功能,比如,刷刷墙,贴个画,
传统的如果想在类中增加改变功能,我们只需继承这个类,重写这个方法就可以了,但是这里有个问题就是。从父类继承的东西是写死的,而你重新写就又浪费了很多代码,没有重用,子类会爆炸增长。
而通过装饰,则可以动态的增加,透明。。。看例子
public class TestDecorator {
public static void main(String[] args) {
Wall t1=new BeforeWall();
Wall t2=new AfterWall(t1);
t2.status();
}
}
abstract class Wall{
public abstract void status();
}
class BeforeWall extends Wall{
public void status(){
System.out.println("我家没有装修,这怎么住%>_<%");
}
}
class AfterWall extends Wall{
Wall Wall;
public AfterWall(Wall t){
this.Wall=t;
}
public void status(){
Wall.status();
System.out.println("我家已装修好了,太舒服了");
}
}
仔细看一下这个我写的例子,注意里面的其实,就是装饰类,添加了一个原来类的引用,重写接口,不仅调用了原来的代码,而且还是可以动态添加,删除,整个过程都是透明的。是不是很容易?