如何理解这6种常见设计模式?( 四 )

试用场景
一个系统需要动态地在几种可替换算法中选择一种 。 不希望使用者关心算法细节 , 将具体算法封装进策略类中 。
注意事项
一定要在策略类的注释中说明该策略的用途和适用场景 。
简单实现
package strategy; public class StrategyPattern { public static void main(String[] args) { Context context = new Context(); Strategy strategyA = new ConcreteStrategyA(); context.setStrategy(strategyA); context.algorithm(); System.out.println(''-----------------''); Strategy strategyB = new ConcreteStrategyB(); context.setStrategy(strategyB); context.algorithm(); } } //抽象策略类 interface Strategy { public void algorithm();//策略方法 } //具体策略类A class ConcreteStrategyA implements Strategy { public void algorithm() { System.out.println(''具体策略A的策略方法被访问!''); } } //具体策略类B class ConcreteStrategyB implements Strategy { public void algorithm() { System.out.println(''具体策略B的策略方法被访问!''); } } //环境类 class Context { private Strategy strategy; public Strategy getStrategy() { return strategy; } public void setStrategy(Strategy strategy) { this.strategy=strategy; } public void algorithm() { strategy.algorithm(); } }5 代理模式(Proxy)
淘宝店客服总是会收到非常多的重复问题 , 例如:有没有现货?什么时候发货?发什么快递?大量回答重复性的问题太烦了 , 于是就出现了小蜜机器人 , 他来帮客服回答那些已知的问题 , 当碰到小蜜无法解答的问题时 , 才会转到人工客服 。 这里的小蜜机器人就是客服的代理 。
代理模式结构
代理模式包含如下角色:

  • Subject: 抽象主题角色
  • Proxy: 代理主题角色
  • RealSubject: 真实主题角色
结构图:
如何理解这6种常见设计模式?
本文插图
时序图:
如何理解这6种常见设计模式?
本文插图
优缺点
  • 优点:代理可以协调调用方与被调用方 , 降低了系统的耦合度 。 根据代理类型和场景的不同 , 可以起到控制安全性、减小系统开销等作用 。
  • 缺点:增加了一层代理处理 , 增加了系统的复杂度 , 同时可能会降低系统的相应速度 。
试用场景
理论上可以代理任何对象 , 常见的代理模式有: