如何理解这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: 真实主题角色
本文插图
时序图:
本文插图
优缺点
- 优点:代理可以协调调用方与被调用方 , 降低了系统的耦合度 。 根据代理类型和场景的不同 , 可以起到控制安全性、减小系统开销等作用 。
- 缺点:增加了一层代理处理 , 增加了系统的复杂度 , 同时可能会降低系统的相应速度 。
理论上可以代理任何对象 , 常见的代理模式有:
- 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个本地的代理对象 , 这个不同的地址空间可以是在同一台主机中 , 也可是在另一台主机中 , 远程代理又叫做大使(Ambassador) 。
- 虚拟(Virtual)代理:如果需要创建一个资源消耗较大的对象 , 先创建一个消耗相对较小的对象来表示 , 真实对象只在需要时才会被真正创建 。
- Copy-on-Write代理:它是虚拟代理的一种 , 把复制(克隆)操作延迟到只有在客户端真正需要时才执行 。 一般来说 , 对象的深克隆是一个开销较大的操作 , Copy-on-Write代理可以让这个操作延迟 , 只有对象被用到的时候才被克隆 。
- 保护(Protect or Access)代理:控制对一个对象的访问 , 可以给不同的用户提供不同级别的使用权限 。
- 缓冲(Cache)代理:为某一个目标操作的结果提供临时的存储空间 , 以便多个客户端可以共享这些结果 。
- 防火墙(Firewall)代理:保护目标不让恶意用户接近 。
- 同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突 。
- 智能引用(Smart Reference)代理:当一个对象被引用时 , 提供一些额外的操作 , 如将此对象被调用的次数记录下来等 。
推荐阅读
- 徐峥|徐峥年初被23家电影公司联名“封杀”,上万人签名抵制,现状如何
- 游戏葡萄|七年磨一剑的任天堂,如何用美术诠释游戏?
- 智能城市崛起,看智能化如何定义未来之城
- 萍姐姐调侃体育|郭艾伦如何回应?国产第一后卫之争愈演愈烈,吴前爆发孙铭徽开挂
- 王者荣耀|李小龙皮肤如何搭配才最帅气,这个回城特效绝配,搭配特效秒变传说皮肤!
- 剖析爱奇艺积分体系,如何做留存和转化
- ZAKER生活|在俄避难的斯诺登,结局如何?,7年前曝光美国“棱镜计划”
- 周到|复盘上海德比首回合 上港如何破申花的密集防守
- 晴晴侃游戏|盗贼和狂暴战谁更适合呢,魔兽怀旧服咸鱼剑近战该如何选择
- 王者荣耀|王者荣耀:不知道如何玩好射手?S21赛季全射手出装铭文合集送给你!
