从王者荣耀看设计模式(代理模式)
一. 代理模式
代理模式(Proxy Pattern): 给某一个对象提供一个代理, 并由代理对象控制对原对象的引用. 代理模式是一种对象结构型模式.
代理模式的使用场景
根据代理模式的使用目的, 常用的代理模式有以下几种类型
1. 远程 (Remote) 代理: 为一个位于不同的地址空间的对象提供一个本地的代理对象, 这个不同的地址空间可以是在同一台主机中, 也可是在另一台主机中, 远程代理又叫做大使(Ambassador)
2. 虚拟 (Virtual) 代理: 如果需要创建一个资源消耗较大的对象, 先创建一个消耗相对较小的对象来表示, 真实对象只在需要时才会被真正创建.
3.Copy-on-Write 代理: 它是虚拟代理的一种, 把复制 (克隆) 操作延迟到只有在客户端真正需要时才执行. 一般来说, 对象的深克隆是一种开销较大的操作, Copy-on-Write 代理可以让这个操作延迟, 只有对象被用到的时候才被克隆
4. 保护 (Protect or Access) 代理: 控制对一个对象的访问, 可以给不同的用户提供不同级别的使用权限.
5. 缓冲 (Cache) 代理: 为某一个目标操作的结果提供临时的存储空间, 以便多个客户端可以共享这些结果.
6. 防火墙 (Firewall) 代理: 保护目标不被恶意用户接近.
7. 同步化 (Synchronization) 代理: 使几个用户能够同时使用一个对象而没有冲突.
8. 智能引用 (Smart Reference) 代理: 当一个对象被引用时, 提供一些额外的操作, 如将此对象被调用的次数记录下来等.
在这些种类的代理中, 虚拟代理, 远程代理和保护代理是最常见的代理模式. 不同类型的代理模式有不同的优缺点, 他们应用于不同的场合
代理模式通用类图:
代理模式所涉及的角色有:
● Subject(抽象主题角色): 抽象主题角色声明了真实主题和代理主题的共同接口, 这样一来在任何使用真实主题的地方都可以使用代理主题. 客户端需要针对抽象主题角色进行编程.
● Proxy(代理主题角色): 代理主题角色内部包含对真实主题的引用, 从而可以在任何时候操作真实主题对象, 在代理主题角色中提供一个与真实主题角色相同的接口, 以便在任何时候都可以替代真实主体. 代理主题角色还可以控制对真实主题的使用, 负责在需要的时候创建和删除真实主题对象, 并对真实主题对象的使用加以约束, 代理角色通常在客户端调用所引用的真实主题操作之前或之后还需要执行其他操作, 而不仅仅是单纯的调用真实主题对象中的操作.
● RealSubject(真实主题角色)
真实主题角色定义了代理角色所代表的真实对象, 在真实主题角色中实现了真实的业务操作, 客户端可以通过代理主题角色间接调用真实主题角色中定义的方法
代理模式的优点:
代理模式能够协调调用者和被调用者, 在一定程度上降低了系统的耦合度
远程代理使得客户端可以访问在远程机器上的对象, 远程机器可能具有更好的计算性能与处理速度, 可以快速响应并处理客户端请求.
虚拟代理通过使用一个小对象来代表一个大对象, 可以减少系统资源的消耗, 对系统进行优化并提高运行速度
保护代理可以控制对真实对象的使用权限
代理模式的缺点
由于在客户端和真实主题之间增加了代理对象, 因此有些类型的代理模式可能会造成请求的处理速度变慢
实现代理模式需要额外的工作. 有些代理模式的实现非常复杂
从王者荣耀看设计模式(远程代理模式)
从王者荣耀看设计模式(虚拟代理模式)
从王者荣耀看设计模式(保护代理模式)
从王者荣耀看设计模式(十三. 代理模式)
来源: http://www.bubuko.com/infodetail-3334286.html