装饰者模式原理及应用
一丶概述
装饰者模式是一种常见的设计模式,在java I/O设计中使用了大量的装饰者设计模式。装饰者设计模式是一种进行方法增强的思路,可以保证在原方法功能不变的基础上,对原方法进行功能上的增强。除了装饰者这种设计模式之外,通过继承和代理也可以完成对对象和方法的增强,这里详细的介绍装饰者设计模式的原理和经典的代码实现。
二丶原理
图2-1 装饰者设计模式的原理
在学习装饰者模式的的时候,需要明白三个对象:
1.接口规范,也是最原始的基类,该类里面定义了可能被增强的方法,无论是待增强对象还是已增强对象都需要实现该接口。
2.代增强对象,待增强对象就是我们需要装饰的对象,对该对象的功能的进行包装,达到升级的目的
3.已增强的对象,已增强的对象就是包装以后的对象。由于已增强的对象和代增强的对象实现了同一个接口,利用多态的原理,可以直接利用增强对象替代待增强对象。
三丶代码实现思路:
利用一个十分简单的例子,来说明装饰者模式的基本代码实现,明确三个角色:第一:接口规范(people,普通人,定义个一个周末的方法)
第二:待增强对象 (unmarry,未婚年轻人,实现一个周末方法,)
第三:已增强对象(marry,已婚年轻人,实现一个周末方法)
1.定义接口规范
public interfacepeople{
public void weekend();
}
2.定义待增强对象
public class unmarryimplements people{
public void weekend(){
System.out.println(“always游戏”);
}
}
3.定义已增强对象(已增强的对象必须设置成员变量指向待增强对象,同时必须实现一个带参数构造方法)
public class marry implements marry{
public unmarrypeople ;
public marry(unmarryunmarry){
people =unmarry;
}
public voidweekend{
//原有方法之前增强
System.out.println(“女票说不能打游戏”);
people.weekend();
//原有方法之后增强
System.out.println(“最后还是在打游戏”);
}
}
4.装饰者模式的增强使用:
people unMarry =new unmarry();
System.out.println(“-----------单身之前周末------------”);
umMarry.weekend();
people Marry=new marry(unMarry);
System.out.println(“-----------单身之后周末------------”);
Marry.weekend();