JAVA设计模式——(六)装饰模式(Decorator Pattern)
JAVA设计模式——(六)装饰模式(Decorator Pattern)
- 介绍
- 理解
- 实现
- 被装饰类
- 被装饰类的具体实现
- 装饰类
- 装饰类具体实现
- 测试
- 适用场景
介绍
动态给一个对象添加一些额外的功能,动态的扩展其功能。
理解
装饰模式,可以方便的扩展一些类的功能。其实现方式更像是一种托管方式,用于将被装饰的类的功能托管给装饰器,装饰器在执行被装饰类的功能的前后可以执行相关的扩展功能。
例如,小明要交五块钱班费给班长,但是呢小明的钱还没有取出来,所以还要去银行取出来,但是小明有事。所以,这时小明让班长帮自己取出来给小明,小明再用五块钱交班费。所以在班费之前,让班长替他取了钱。
实现
被装饰类
package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:14* @Contact 643947568@qq.com*/
public interface Weapon {public void createWeapon();
}
被装饰类的具体实现
package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:15* @Contact 643947568@qq.com*/
public class Pistol implements Weapon{@Overridepublic void createWeapon() {System.out.println("制造手枪");}
}
装饰类
package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:15* @Contact 643947568@qq.com*/
public abstract class WeaponDecorator implements Weapon {private Weapon weapon = null;public WeaponDecorator(Weapon weapon) {this.weapon = weapon;}@Overridepublic void createWeapon() {this.weapon.createWeapon();}
}
装饰类具体实现
package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 15:17* @Contact 643947568@qq.com*/
public class ActualWeaponDecorator extends WeaponDecorator {public ActualWeaponDecorator(Weapon weapon) {super(weapon);}private void expandMethod() {System.out.println("执行扩展方法");}@Overridepublic void createWeapon() {super.createWeapon();expandMethod();}
}
测试
package cn.sh.designepattern;/** 装饰模式* @Author song* @Version 0.0.1* @Date 2025/4/24 14:50* @Contact 643947568@qq.com*/public class Main {public static void main(String[] args) {Weapon pistol = new Pistol();ActualWeaponDecorator actualWeaponDecorator = new ActualWeaponDecorator(pistol);actualWeaponDecorator.createWeapon();}
}
适用场景
装饰模式适用于不修改原来类的前提下,扩展类的功能,从而避免了继承关系的实现扩展。
但是装饰过多会导致结构复杂。