网站开发周期和进度管理,网站 psd,青岛网站建设 熊掌号,wordpress关闭评论目录 一、背景介绍二、思路方案三、过程1.装饰模式简介2.装饰模式的类图3.装饰模式代码4.装饰模式#xff0c;职责父类拆分的奥义5.装饰模式#xff0c;部件抽象类的无中生有 四、总结五、升华 一、背景介绍
最近公司在做架构模型的时候#xff0c;涉及到装饰模式的研… 目录 一、背景介绍二、思路方案三、过程1.装饰模式简介2.装饰模式的类图3.装饰模式代码4.装饰模式职责父类拆分的奥义5.装饰模式部件抽象类的无中生有 四、总结五、升华 一、背景介绍
最近公司在做架构模型的时候涉及到装饰模式的研究对于装饰模式的边界理解本次有了看山还是山的效果故做此总结以记录本次的升华。
二、思路方案
1.装饰模式简介2.装饰模式的类图3.装饰模式代码4.装饰模式职责父类拆分的奥义5.装饰模式部件抽象类的无中生有
三、过程
1.装饰模式简介
装饰模式Decorator:动态地给一个对象添加一些额外的职责就增加功能来说装饰模式比生成子类更为灵活。
解释给(ConcreteComponent)对象增加一些额外(Decorator的子类)职责就给(ConcreteComponent)增加功能来说通过生成(ConcreteComponent)子类的方式增加功能装饰模式更为灵活(扩展装饰子类通过聚合方式装饰耦合性更低)
2.装饰模式的类图 3.装饰模式代码
package com.a7DesignPattern.a2StructuralType.a04Decorator;/*** 功能描述** Authormakang* Date: 2021/5/19 14:43*/
public class Client {public static void main(String[] args) {ConcreteComponent c new ConcreteComponent();ConcreteComponentA a new ConcreteComponentA();ConcreteComponentB b new ConcreteComponentB();a.setComponent(c);b.setComponent(a);b.Operation();}
}
package com.a7DesignPattern.a2StructuralType.a04Decorator;/*** 功能描述** Authormakang* Date: 2021/5/19 11:30*/
public abstract class Component {public abstract void Operation();
}
package com.a7DesignPattern.a2StructuralType.a04Decorator;/*** 功能描述** Authormakang* Date: 2021/5/19 11:37*/
public class ConcreteComponent extends Component{Overridepublic void Operation() {System.out.println(具体对象的操作);}
}
package com.a7DesignPattern.a2StructuralType.a04Decorator;/*** 功能描述** Authormakang* Date: 2021/5/19 11:43*/
public class Decorator extends Component{protected Component component;Overridepublic void Operation() {if(component ! null){component.Operation();}}public void setComponent(Component component) {this.component component;}
}
package com.a7DesignPattern.a2StructuralType.a04Decorator;/*** 功能描述** Authormakang* Date: 2021/5/19 14:27*/
public class ConcreteComponentA extends Decorator{private String addedState;Overridepublic void Operation() {super.Operation();addedState New State;System.out.println(具体装饰对象A);}
}
package com.a7DesignPattern.a2StructuralType.a04Decorator;import com.a6UMLRelationShip.a3combination.a2.A;/*** 功能描述** Authormakang* Date: 2021/5/19 14:29*/
public class ConcreteComponentB extends Decorator{Overridepublic void Operation() {super.Operation();AddedBehavior();System.out.println(具体装饰对象B);}private void AddedBehavior(){}
}
4.装饰模式职责父类拆分的奥义
Decorator类是从ConcreteComponent中的装饰行为中抽象出来的类从而使得后续扩展装饰符合开闭原则。
5.装饰模式部件抽象类的无中生有
ConcreteComponent中的装饰行为的拆分使得这些行为与被装饰者必须得从客户端产生关系这也就对客户端暴露了业务因而产生Component类。
四、总结
1.无装饰模式情况下将装饰方式当做被装饰者类中行为这些行为对于被装饰者类而言不支持开闭原则。2.装饰行为在被装饰者中剥离之后使得两个如何合并成为了眼前的问题。3.无中生有的做一个部件抽象类又将两者做了部件类上的合并。4.技术上可以实现业务上没有实现这样的一种实现结果是否算是符合要求的 将这条透明化的问题提出来也是进步的印证。
五、升华
该模式从技术角度通过剥离无中生有父类的角度实现了扩展装饰符合开闭原则并且对于客户端也没有对外暴露装饰过程的效果在业务的角度是需要站到技术的基础之上去理解业务才会更加顺畅。