Java常见的4种设计模式——装饰者模式

  • 装饰者模式用来解决什么问题呢?
  • 一个类要对它进行功能的扩展,
  • 一般的办法是使用继承派生子类,
  • 然后通过方法进行功能的扩展,
  • 这样做的不足是耦合性太高,
  • 一个类发生变化就用影响另外一个类,
  • 那么使用装饰者模式就可以解决这个问题,
  • 也就能降低耦合性。
  • 如何做呢?(动态给一个对象添加额外的功能。)
  • 定义一个类为装饰者类,
  • 定义另外一个类为被装饰者类,
  • 将被装饰者类注入到装饰者类中,
  • 然后定义构造方法。
  • 要求:
  • 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(); } }

    推荐阅读