设计模式 - 装饰器模式
装饰器模式(包装器: 功能增强):动态的给一个对象添加一些额外的职责(是继承的替代,但相比继承而言,组合的方式更具灵活性)
实现方式:(组合)装饰类(Decorator) + 被装饰接口(IComponent) - 动态地对Component对象的功能进行增强,避免了继承的弊端(尤其是多重继承)
核心:{多重}组合 + 功能增强 - 继承是静态添加功能,而装饰器模式是通过组合动态地添加功能(可选择地装配,可卸载)
角色:
- IComponent 抽象构件接口:核心对象,具体构件和装饰角色均需继承自该对象
- Component 具体构件:被装饰地类。
- IDecorator 装饰角色接口:通过组合地方式持有一个private引用,指向Component抽象构件(多重装饰地情况下,Decorator对象同时也作为中间过程地Component对象)
- DecoratorX 具体装饰器角色:实现功能增强的装饰代码。
Test
+ View Code
Decorator
+ View Code
public class BufferedReadDecorator extends IDecorator{
public BufferedReadDecorator(AbstractComponent component) {
super(component);
}
// 装饰器实现类,通过IComponent的业务方法以及额外的逻辑,实现功能增强
@Override
void read() {
super.read();
System.out.print("with buffered ");
}
}
Component
// IComponent 对象无需知晓装饰器的存在。
public abstract class IComponent {
abstract void read();
}
public class Component extends AbstractComponent{
@Override
void read() {
System.out.print("read bytes ");
}
}
欢迎疑问、期待评论、感谢指点 -- kiqi,愿同您为友
-- 星河有灿灿,愿与之辉
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步