1、什么是装饰器模式?attach additional responsibilities to an object dynamically keeping the same interface.decorators provide a flexible alternative to subclassing for extending functionality.
装饰器模式(decorator pattern):动态的给一个对象添加额外的职责,就增加功能来说, 装饰模式相比生成子类更为灵活。
说人话:一般的,我们为了扩展一个类经常使用继承方式实现,随着扩展功能的增多,子类会很膨胀。这时候期望在不改变类对象及其类定义的情况下,为对象添加额外功能,这就是装饰器模式。
2、装饰器模式定义
①、component抽象构件
component是一个接口或者是抽象类, 就是定义我们最核心的对象, 也就是最原始的对象。
②、concretecomponent 具体构件
concretecomponent是最核心、 最原始、 最基本的接口或抽象类的实现, 你要装饰的就是它。
③、decorator装饰角色
一般是一个抽象类, 实现接口或者抽象方法, 它里面可不一定有抽象的方法, 在它的属性里必然有一个private变量指向component抽象构件。
④、concretedecorator 具体装饰角色
concretedecoratora和concretedecoratorb是两个具体的装饰类, 你要把你最核心的、 最原始的、 最基本的东西装饰成其他东西
3、装饰器模式通用代码实现/** * 抽象构件 */public abstract class component { public abstract void operator();}/** * 具体构件 */public class concretecomponent extends component{ @override public void operator() { system.out.println(dosomething); }}/** * 抽象装饰者 */public abstract class decorator extends component{ private component component; public decorator(component component){ this.component = component; } // 委托给被修饰者执行 @override public void operator() { this.component.operator(); }}public class concretedecorator1 extends decorator{ // 定义被修饰者 public concretedecorator1(component component){ super(component); } // 定义自己的修饰方法 public void method1(){ system.out.println(修饰方法 method1); } @override public void operator() { this.method1(); super.operator(); }}public class concretedecorator2 extends decorator{ // 定义被修饰者 public concretedecorator2(component component){ super(component); } // 定义自己的修饰方法 public void method2(){ system.out.println(修饰方法 method2); } @override public void operator() { super.operator(); this.method2(); }}客户端测试:
public class decoratorclient { public static void main(string[] args) { component component = new concretecomponent(); // 第一次修饰 component = new concretedecorator1(component); // 第二次修饰 component = new concretedecorator2(component); // 修饰后运行 component.operator(); }}打印结果:
4、装饰器模式优点①、装饰模式可以动态地扩展一个实现类的功能。
②、装饰类和被装饰类可以独立发展, 而不会相互耦合。换句话说, component类无须知道decorator类, decorator类是从外部来扩展component类的功能, 而decorator也不用知道具体的构件。
③、装饰模式是继承关系的一个替代方案。我们看装饰类decorator, 不管装饰多少层, 返回的对象还是component, 实现的还是is-a的关系
5、装饰器模式应用场景①、需要扩展一个类的功能, 或给一个类增加附加功能。
②、需要动态地给一个对象增加功能, 这些功能可以再动态地撤销。
联想昭阳K43拆解 多处纯金属工艺的采用十分的良心
自适应滤波技术在高噪音环境下的应用研究
物联网关键技术挑战和痛点
FMCW激光雷达的性能优势有哪些 以及其中的量产难点有哪些
360N5开箱测评:强悍性能 全球首款6GB千元机
如何动态地给一个类增加功能
三星半导体欲扭亏为盈,营业利润预计达11.5万亿韩元
马达的正反转和停转设计
WiFi分享软件安全吗_WiFi分享软件乱象调查_密码被侵犯
微商“传销虚拟币”不断,我们应如何防范?
!销售/回收JSG-1610A信号源JSG-1610A现货!
排阻原理图
5G时代将临,消费电子行业对此充满期待
关于FPGA展现卓越的全可编程性的介绍和分析
荣耀V9怎么样?华为荣耀V9评测:荣耀V9流畅界的战斗机,500天不卡顿降价200值得购买
5G/4G/APN智能驾考系统解决方案
创想焊缝跟踪在酿酒设备行业的应用分享
微软也要开始设计Arm处理器吗
QLC固态硬盘专业评测
你怎样看待电子营业执照和区块链技术的结合