如何理解这6种常见设计模式?( 三 )
装饰模式结构
装饰模式包含如下角色:
- Component:抽象构件
- ConcreteComponent:具体构件
- Decorator:抽象装饰类
- ConcreteDecorator:具体装饰类
本文插图
时序图:
本文插图
优缺点
- 优点:比继承更加灵活(继承是耦合度很大的静态关系) , 可以动态的为对象增加职责 , 可以通过使用不同的装饰器组合为对象扩展N个新功能 , 而不会影响到对象本身 。
- 缺点:当一个对象的装饰器过多时 , 会产生很多的装饰类小对象和装饰组合策略 , 增加系统复杂度 , 增加代码的阅读理解成本 。
- 适合需要(通过配置 , 如:diamond)来动态增减对象功能的场景 。
- 适合一个对象需要N种功能排列组合的场景(如果用继承 , 会使子类数量爆炸式增长)
- 一个装饰类的接口必须与被装饰类的接口保持相同 , 对于客户端来说无论是装饰之前的对象还是装饰之后的对象都可以一致对待 。
- 尽量保持具体构件类Component作为一个“轻”类 , 也就是说不要把太多的逻辑和状态放在具体构件类中 , 可以通过装饰类 。
package decorator; public class DecoratorPattern { public static void main(String[] args) { Component component = new ConcreteComponent(); component.operation(); System.out.println(''---------------------------------''); Component decorator = new ConcreteDecorator(component); decorator.operation(); } } //抽象构件角色 interfaceComponent { public void operation(); } //具体构件角色 class ConcreteComponent implements Component { public ConcreteComponent() { System.out.println(''创建具体构件角色''); } public void operation() { System.out.println(''调用具体构件角色的方法operation()''); } } //抽象装饰角色 class Decorator implements Component { private Component component; public Decorator(Component component) { this.component=component; } public void operation() { component.operation(); } } //具体装饰角色 class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) { super(component); } public void operation() { super.operation(); addBehavior(); } public void addBehavior() { System.out.println(''为具体构件角色增加额外的功能addBehavior()''); } }4 策略模式(Strategy)
男生追妹子时 , 一般都会用到这种模式 , 常见的策略有这些:约会吃饭;看电影;看演唱会;逛街;去旅行…… , 虽然做的事情不同 , 但可以相互替换 , 唯一的目标都是捕获妹子的芳心 。
策略模式结构
- Context: 环境类
- Strategy: 抽象策略类
- ConcreteStrategy: 具体策略类
本文插图
时序图:
本文插图
优缺点
- 优点:策略模式提供了对“开闭原则”的完美支持 , 用户可以在不修改原有系统的基础上选择算法或行为 。 干掉复杂难看的if-else 。
- 缺点:调用时 , 必须提前知道都有哪些策略模式类 , 才能自行决定当前场景该使用何种策略 。
推荐阅读
- 徐峥|徐峥年初被23家电影公司联名“封杀”,上万人签名抵制,现状如何
- 游戏葡萄|七年磨一剑的任天堂,如何用美术诠释游戏?
- 智能城市崛起,看智能化如何定义未来之城
- 萍姐姐调侃体育|郭艾伦如何回应?国产第一后卫之争愈演愈烈,吴前爆发孙铭徽开挂
- 王者荣耀|李小龙皮肤如何搭配才最帅气,这个回城特效绝配,搭配特效秒变传说皮肤!
- 剖析爱奇艺积分体系,如何做留存和转化
- ZAKER生活|在俄避难的斯诺登,结局如何?,7年前曝光美国“棱镜计划”
- 周到|复盘上海德比首回合 上港如何破申花的密集防守
- 晴晴侃游戏|盗贼和狂暴战谁更适合呢,魔兽怀旧服咸鱼剑近战该如何选择
- 王者荣耀|王者荣耀:不知道如何玩好射手?S21赛季全射手出装铭文合集送给你!
