装饰者模式主要作用是对对象的功能进行扩展,而扩展方法有两种,一是派生子类,二是装饰者模式
派生子类的存在问题
- 高耦合
- 对类进行修改都会影响到其派生类
装饰者模式的优势
- 动态给一个对象添加额外的功能,比派生子类更加灵活
- 低耦合
实现
装饰者模式的要求
- 装饰者中包含被装饰者
可以是多态形式->被装饰者实现的接口或父类
- 装饰者和被装饰者的功能名称需要保持一致
保持一致性
- 装饰者和被装饰者需要实现同一接口(抽象类)
用于规范功能
代码实现:
用于规范的接口类
package com.heiheihei.pojo;
/**
* @author 嘿嘿嘿1212
* @version 1.0
* @date 2020/2/21 20:34
*/
public interface Chicken {
void get();
}
被装饰者类
package com.heiheihei.pojo;
/**
* @author 嘿嘿嘿1212
* @version 1.0
* @date 2020/2/21 20:38
* 被修饰类
*/
public class EatChicken implements Chicken {
public void get() {
System.out.println("我正在用筷子吃鸡");
}
}
修饰者类
package com.heiheihei.pojo;
/**
* @author 嘿嘿嘿1212
* @version 1.0
* @date 2020/2/21 20:41
* 修饰者类
*/
public class EatChickenModify implements Chicken {
private Chicken estChicken;
public EatChickenModify() {
}
public EatChickenModify(Chicken estChicken) {
this.estChicken = estChicken;
}
public void get() {
System.out.println("我先将鸡肉抄成菜");
estChicken.get();
System.out.println("我正在洗碗");
}
}
测试类
package com.heiheihei.pojo;
/**
* @author 嘿嘿嘿1212
* @version 1.0
* @date 2020/2/21 20:47
*/
public class EatChickenTest {
public static void main(String[] args) {
Chicken estChicken = new EatChicken();
new EatChickenModify(estChicken).get();
}
}
结果
动态的扩展了EatChicken实例的功能,并且耦合较低