- 首页 > it技术 > >
- 装饰者模式用来解决什么问题呢?
- 一个类要对它进行功能的扩展,
- 一般的办法是使用继承派生子类,
- 然后通过方法进行功能的扩展,
- 这样做的不足是耦合性太高,
- 一个类发生变化就用影响另外一个类,
- 那么使用装饰者模式就可以解决这个问题,
- 也就能降低耦合性。
- 如何做呢?(动态给一个对象添加额外的功能。)
- 定义一个类为装饰者类,
- 定义另外一个类为被装饰者类,
- 将被装饰者类注入到装饰者类中,
- 然后定义构造方法。
- 要求:
- 1.装饰者中包含被装饰者
- 2.装饰者和被装饰者的功能名称需要保持一致(可以通过 抽象方法来实现)
- 3.装饰者和被装饰者要需实现同一类型
/**
定义一个类为装饰者类
*/
public class decoratorMode extends sameFunctions{
private decratedClass dc;
//装饰者中包含被装饰者,将被装饰者类注入到了装饰者类中
public decoratorMode(){};
public decoratorMode(decratedClass dc){//通过有参构造方法,对变量被装饰者对象dc进行初始化
this.dc = dc;
}
public void get(){//装饰者和被装饰者的功能名称需要保持一致
dc.get();
//原来功能
System.out.println("装饰者对被装饰者进行功能的扩展!~");
//扩展功能
}
}
/**
* 被装饰者类,我们要对它的功能进行扩展
*/
public class decratedClass extends sameFunctions{//现在的目的是通过装饰者类,对该类进行装饰,动态实现功能
public void get(){
System.out.println("被装饰者在此等候多时!");
}
}
/**
装饰者和被装饰者的功能名称需要保持一致(可以通过 抽象方法来实现)
*/
public abstract classsameFunctions {
public abstract voidget();
}
public class dmDemo {
public static void main(String[] args) {
decratedClass dc = new decratedClass();
decoratorMode dm = new decoratorMode(dc);
dm.get();
}
}
推荐阅读