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 class  sameFunctions {
    public abstract void  get();
}

public class dmDemo {
    public static void main(String[] args) {
        decratedClass dc = new decratedClass();
        decoratorMode dm = new decoratorMode(dc);
        dm.get();
    }
}

你可能感兴趣的:(Java)