2017-01-07 复合模式、代理模式

来源:互联网 发布:查询宝贝排名软件 编辑:程序博客网 时间:2024/05/07 19:55

2017-01-07 复合模式、代理模式


Head First设计模式-复合模式

    Compound Pattern模式,复合模式,一种由模式所构成的模式。如MVC(Model-View-Controller)。

    我们可以创建装饰者,把目标对象包装进装饰者中,给目标对象一些新的行为。

    装饰对象的问题就在于:有装饰才有效果,没有装饰就没有效果。

    在OO设计的过程中,折中一直都是免不了的。

    采用模式必须考虑这么做是否有意义。

    MVC,模型和视图之间的数据流动是由控制器居中协调进行的,两者之间状态的改变,数据的同步都是由控制器控制的。

    《Head First设计模式》中模型与视图之间有交互,但我觉得模型与视图之间不应该交互,而是应该通过控制器进行交互。

    控制器做的事情不只是有“发送给模型”,还会解读输入,并根据输入操纵模型。

    为什么不能把与模型交互的代码放入视图中?有两个原因:首先,这会让视图的代码变得更复杂,因为这样一来视图就有两个责任,不但要管理用户界面,还要处理如何控制模型的逻辑。第二个原因,这么做将造成模型和视图之间紧耦合,如果你想复用此视图来处理其他模型,根本不可能。控制器把逻辑从视图中分离,让模型和视图之间解耦。通过保持控制器和视图之间松耦合,设计就更有弹性而且容易扩展。

    策略:视图和控制器实现了经典的策略模式,视图是一个对象,可以被调整使用不同的策略,而控制器提供了策略。视图只关心系统中的可视部分,对于任何界面行为,都委托给控制器处理。使用策略模式也可以让视图和模型之间的关系解耦,因为控制器负责和模型交互来传递用户的请求。对于工作是怎么完成的视图毫不知情。

    可以用观察者模式实现模型,当状态改变时,相关对象将持续更新。使用观察者模式,可以让模型完全独立于视图和控制器。同一个模型可以使用不同的视图,甚至可以同时使用多个视图。

    控制器在中间... …

    控制器位于视图和模型之间。他将用户的输入,传给模型做动作。


6:Compound(|ˈkɒmpaʊnd| noun 化合物、混合物、组合物 |ˈkɒmpaʊnd|adj) Pattern 

7:MVC:Model-View-Controller

11:子集合:subcollection


12:public、interface、void、implement、simulator、counter、static、abstract factory、iterator、register、observer、report、remote proxy


14:machine |məˈʃiːn|

15:notify |ˈnəʊtɪfaɪ| v 通知

16:remote |rɪˈməʊt| adj 遥远的 偏远的

17:asynchronous |eɪˈsɪŋkrənəs| adj 异步的

18:synchronous |ˈsɪŋkrənəs| adjective 同步的


Head First设计模式-代理模式

代理模式:控制和管理访问

    所谓的代理(proxy),就是代表某个真实的对象。在这个案例中,代理就像是糖果机一样,但其实幕后它利用网络和一个远程的真正糖果机沟通。

    这个代理假装它是真正的对象,但是其实一切的动作是它利用网络和真正的对象沟通。

    远程代理就好比“远程对象的本地代表(representative |ˌreprɪˈzentətɪv|)”。


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

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

    代理模式有很多变体,几乎都和“控制访问”的做法有关。如远程代理控制访问远程对象。虚拟代理控制访问创建开销大的资源。保护代理给予权限控制对资源的访问。

    虚拟代理作为创建开销大的对象的代表。虚拟代理经常直到我们真正需要一个对象的时候才创建它。当对象在创建前和创建中时,由虚拟代表来扮演对象的替身。对象创建后,代理就会将请求直接委托给对象。

    可以看出Proxy有时看起来很像装饰者模式,都是用一个对象把另一个对象包装起来,满足一些新的需求。但他们的目的是不一样的。装饰者为对象增加行为,而代理是控制对象的访问。

    在ImageProxy的例子中,你总是创建新的ImageProxy来取得图像,即使图像已经被取回来。这时可以使用缓存代理(Caching Proxy)。缓存代理维护之前创建的对象,当收到请求时,在可能的情况下返回缓存对象。

    代理和适配器也很想,都是挡在其它对象的前面,并负责将请求转发给它们。适配器会改变对象适配的接口,而代理实现相同的接口。

    保护代理:根据访问权限决定客户可否访问对象的代理。

    装饰者:包装另一个对象,并提供额外的行为。

    外观:包装许多对象以简化他们的接口。

    代理:包装另一个对象,并控制对他的访问。

    适配器:包装另一个对象,并提供不同的接口。

    防火墙代理(Firewall Proxy)控制网络资源的访问,保护主题免于“坏客户”的侵害。

    智能引用代理(Smart Reference Proxy)当主题被引用时,进行额外的动作,例如计算一个对象被引用的次数。

    缓存代理(Caching Proxy)为开销大的运算结果提供暂时存储:它允许多个客户共享结果,以减少计算机或网络延迟。


1:Proxy that stands in(stand in 代替)) for expensive(IkˈspensIv) objects:Virtual proxy.


2:Software developer agent(|ˈeɪdʒənt| n 代理人) was being this kind of proxy:Protection(|prəˈtekʃn|) proxy.


3:Similar(|ˈsɪmɪlə(r)| adj 相似的) to proxy,but with a different purpose(|ˈpɜːpəs| n 目的):decorator.


4:Proxy that protects method calls from unauthorized callers:Protection proxy(unauthorized |ʌnˈɔːθəraɪzd| adj 未经授权的、未经允许的,authorize |ˈɔːθəraɪz| v 批准).


5:Commonly used proxy for web services:web proxy.


8:缓存代理:Caching Proxy

9:防火墙代理:Firewall Proxy

10:智能引用代理:Smart Reference Proxy

13:representative |ˌreprɪˈzentətɪv| adj 典型的 代表制的 n 代表

0 0
原创粉丝点击