Head First 设计模式 Design Pattern 11-13 Proxy, Combining, For Real

来源:互联网 发布:c语言中求根号 编辑:程序博客网 时间:2024/06/05 11:18

Section 11 代理模式 Proxy

控制和管理访问 

代理模式 为另一个对象提供一个替身或占位符以控制对这个对象的访问.

使用代理模式创建代表representative对象, 让代表对象控制某对象的访问, 被代理的对象可以是远程的对象, 创建开销大的对象或需要安全控制的对象.


>远程代理Remote Proxy  隐藏远程细节, 调用代理的方法, 远程代理利用网络转发到远程执行, 结果通过网络返回给代理, 由代理将结果转给客户.

GumballMachineRemote  GumballMonitor

>虚拟代理Virtual Proxy 作为开销大的对象的代表, 当对象在创建前和创建中时, 由虚拟代理来代替对象, 对象创建后代理会将请求直接委托给对象.

ImageProxy

>保护代理Protection Proxy 不同的客户对于一个对象有不同的访问权限, 保护代理向不同的客户提供不同的访问权限. (Java动态代理)

PersonBean InvocationHandler

>其他代理

防火墙代理Firewall Proxy 控制网络资源的访问, 保护主题免受侵害

智能代理SmartReference Proxy 当主题被引用时, 进行额外的操作, 例如计算引用次数

缓存代理Caching Proxy 为开销大的计算结果提供暂时存储, 允许共享结果以减少计算时间和网络延迟

同步代理Synchronization Proxy 多线程的情况下为主题提供安全的访问

复杂隐藏代理ComplexityHiding Proxy 隐藏一个类的复杂集合的复杂度, 进行访问控制. 也成为外观代理Facade Proxy.

写入时复制代理CopyOnWirte Proxy 控制对象的复制, 方法是延迟对象的复制直到客户真正需要为止.

Summary

>要点 代理模式为另一个对象提供代表, 以便控制客户对对象的访问, 管理访问的方式有多种; 远程代理客户和远程对象之间的交互; 虚拟代理控制访问实例化开销大的

对象; 保护代理基于调用者控制对对象方法的访问; 代理在结构上类似装饰者, 目的不同; 装饰者为对象加上行为, 代理是控制访问; 代理增加实际中类的数目(Wrapper).

InvocationHandler, Virtual, Detour, Rmiregistry, MethodInvocation, Protection, Decorator, Skeleton, Remote, Dynamic, WebProxy, Stub

---Section 11 End---


Section 12 复合模式 Combining

>模式的模式 Compound Pattern

>复合模式通常被一起使用, 组合在同一个设计方案中, 结合多个模式解决一般或者重复发生的问题.

MVC 模型-视图-控制器

>视图 呈现模型 通常直接从模型中取得需要显示的数据和状态

>控制器 取得用户的输入并解读其对模型的影响

>模型 持有所有的数据 状态 程序逻辑, 提供操作和检索的接口, 发送状态改变通知给观察者

视图是控制器的窗口, 控制器解读用户的动作, 通知模型进行相应的反馈和改变; 控制器也会要求视图作出相应的改变, 视图会从模型取得显示的状态, 作出相应改变.

>控制器的功能 通知模型 解读输入操作模型, 可以减低视图代码的复杂度, 帮助模型和视图解耦合, 有利于视图复用于其他模型, 使得设计容易扩展. 

策略模式 视图和控制器 视图是对象 控制器是策略

观察者模式 视图是模型的观察者 

组合模式 视图是一个树形的UI组合

Summary

>OO模式 复合模式结合两个或以上的模式组成一个解决方案, 解决一再发生的一般性问题.

>要点 MVC是复合模式, 结合了策略 观察者 组合; 模型使用观察者, 通知更新 保持解耦合; 控制器是是视图的策略, 视图可以使用不同控制器得到不同的行为; 视图使用组合模式 

UI通常是嵌套组件panel frame button; 模式帮助MVC的三层解耦; 适配器可以将新的模型适配已有的视图和控制器; 

---Section 12 End---


Section 13 真实世界的模式 For Real

模式 在某种情境Context下 针对某问题的某种解决方案

>情镜 应用某个模式的情况 >问题 希望在某个情境下达到的目的 或者某个情境下的约束 >解决方案 通用的设计

模式的描述 >Name 共享交流的名称 >Catalog 模式的类目 >Intent 意图 简短描述模式的作用 >Motivation 动机 给出问题场景以及如何解决 >Applicability 适用性 描述应用场合

>Structure 结构 提供类图 显示类之间的关系 >Participants 参与者 描述在设计中涉及到的对象和类在模式中的责任和角色 >Collaborations 协作 参与者如何合作 >Consequences

结果 可能产生的效果 好的方面和不好的 >Implementation/Sample Codes 实现 提供所需的技巧 需要研究的问题 示例代码 提供代码片段 帮助实现 >Known Use 已知应用 描述在

真实系统中发现的模式例子 >Related Patterns 相关模式 描述和其他模式之间的关系

模式类目  

>创建型 涉及对象实例化 提供一个方法 将客户从所需要实例化的对象中解耦 Singleton AbstractFactory FactoryMethod (Builder Prototype)

>行为型 涉及类和对象如何交互分配职责 TemplateMethod Iterator Command Observer State Strategy (Mediator Vistor Interpreter Memento ChainOfResponsibility) 

>结构型 把类和对象组合到更大的结构中 Proxy Decorator Facade Composite Adapter (Flyweight Bridge)

另一种分类方式 模式处理的是类还是对象 

>类模式描述类之间的关系如何通过继承定义 在编译时建立关系 TemplateMethod FactoryMethod Adapter Interpreter

>对象模式描述对象之间的关系 主要利用组合定义 在运行时建立关系 更加有弹性 others...

使用指南 保持简单 KISS keep it simple 在合适和需要的地方使用模式, 在可简化的地方使用简单方式; 设计时考虑模式, 重构时也要考虑模式; 需要的时候可以删除模式简化系统; 

不同领域的模式 >架构模式 建立城镇建筑城市的架构 >应用模式 建立系统级架构的模式 多层架构 >领域特定模式 特定领域 并发系统或实时系统 >业务流程模式 描述业务 顾客和数据

之间的交互 决策和沟通 >组织模式 人类组织的结构以及实践 >UI设计模式 解决交互式软件的设计问题

反模式 采用一个不好的解决方案解决一个问题  反模式看起来像一个好的解决方案, 采用后却会带来麻烦, 通过将反模式归档, 分辨出不好的解决方案

Summary

>要点 让设计模式自然得出现在设计需要的地方, 不是为了模式而模式; 根据需要采用或者修改模式; 选择最简单的方案, 不管是否使用模式; 模式类目帮助学习理解; 需要时间和耐心来

提炼精化模式; 模式是发现的, 大多数模式是现有模式的变体; 模式帮助统一化共享名词; 

模式定义

>装饰者 包装对象提供新的行为 >状态 封装基于状态的行为 使用委托在状态间切换 >迭代器 在对象集合中遍历 不暴露集合的实现 >外观 简化一群类的接口 >策略 封装可以互换的行为

使用委托来决定使用哪个 >代理 包装对象 控制对此对象的访问 >工厂方法 由子类决定要创建的具体类是哪个 >适配器 封装对象 提供不同的接口 >观察者 让对象在状态改变时被通知

>模板方法 由子类决定如何实现算法中的步骤 >组合 客户使用一致的方式处理对象集合和单个对象 >单件 确保只有一个对象被创建 >抽象工厂 允许客户创建对象的家族 无需指定他们

的具体类 >命令 封装请求成为对象 

---Section 13 End---