怎样做单页销售网站,python编程软件手机版下载,vps做自己的网站,北京网站定制公司23种设计模式之装饰者模式 文章目录 23种设计模式之装饰者模式设计思想装饰者模式的优点装饰者模式的缺点装饰者模式的优化方法UML 解析预设场景 代码释义总结 设计思想
原文:装饰器模式#xff08;Decorator Pattern#xff09;允许向一个现有的对象添加新的功能#xff0…23种设计模式之装饰者模式 文章目录 23种设计模式之装饰者模式设计思想装饰者模式的优点装饰者模式的缺点装饰者模式的优化方法UML 解析预设场景 代码释义总结 设计思想
原文:装饰器模式Decorator Pattern允许向一个现有的对象添加新的功能同时又不改变其结构。这种类型的设计模式属于结构型模式它是作为现有的类的一个包装。
这种模式创建了一个装饰类用来包装原有的类并在保持类方法签名完整性的前提下提供了额外的功能。把一个形状装饰上不同的颜色同时又不改变形状类。
简述:看到原文介绍很多人会认为装饰者模式与代理模式没区别其实区别还是有的只是在用的时候可能会存在异变代理模式装饰者模式其根本是为了 增强被装饰者的方法。
装饰者模式的优点
可以在不修改原有对象的基础上给对象增加新的功能遵循开闭原则。可以使用多个具体装饰者来组合出不同的功能实现灵活性和可扩展性。可以根据需要动态地增加或删除功能而不影响其他对象。可以保持被装饰对象的类型和接口不变对客户端透明。
装饰者模式的缺点
-会增加系统的复杂度和类的数量可能导致代码难以理解和维护。
会增加对象之间的耦合度可能引入循环引用的问题。会影响被装饰对象的效率和性能。动态地多层装饰时调试和维护比较困难
装饰者模式的优化方法
尽量减少装饰者的数量和层次避免过度使用装饰者模式使用工厂方法或者建造者模式来创建装饰者对象简化客户端的调用使用组合/聚合代替继承降低装饰者和被装饰者之间的耦合度
UML 解析 预设场景
RanchStaff 牧场工作人员 CowRanch 奶牛牧场 MilkProcessing 牛奶加工 RanchAiRobot 牧场人工智能机器人
牧场工作人员可以挤奶 生产牛奶 但是我想在生产牛奶前进行消毒处理以及牛奶生产后进行包装代码释义
/*** 奶牛牧场*/
public interface CowRanch {void milkProduction();
}
public class MilkProcessing extends RanchAiRobot {public MilkProcessing(CowRanch cowRanch) {super(cowRanch);}public void disinfect() {System.out.println(先进行消毒 处理);}Overridepublic void milkProduction() {disinfect();super.milkProduction();packageMilk();}public void packageMilk() {System.out.println(将生产出的牛奶进行包装);}
}
/*** 牧场人工智能 机器人*/
public abstract class RanchAiRobot implements CowRanch {private CowRanch cowRanch;public RanchAiRobot() {}public RanchAiRobot(CowRanch cowRanch) {this.cowRanch cowRanch;}public void milkProduction() {cowRanch.milkProduction();}
}
/*** 牧场工作人员*/
public class RanchStaff implements CowRanch {public void milkProduction() {System.out.println(将奶牛的奶挤出制成牛奶);}
}总结
装饰者模式 其核心就是为了增强方法对原业务的扩展以上面的场景来说牧场工作人员只做牛奶的生产但是想要对牛奶进行销售只生产是不够的生产前后都需要增加其他的行为。 装饰抽象层存在的意义 抽象类实现接口可以选择性的去实现接口的抽象方法并不需要重写接口所有方法装饰抽象层可以精确的让具体装饰者去装饰某一个行为。