[toc]
外观模式#
也叫门面模式。
- 当我们有很多的类,各种类之间的方法互相关联,存在复杂的调用先后顺序时
- 一种方法是告诉别人 这些类的用法, 让他们自己注意使用顺序。(比如你要先调A再调B才有用)
- 另一种是提供一个统一对外的接口, 在接口里去组装这些顺序。
这就是facade模式,看起来像一个窗口或者客户端, 外界不知道这些类的关系,但是只需要调门面的几个方法即可。
也不一定是为了复杂的调用顺序,可能就是为了让调用者不用关心用哪个类,只关心调哪个方法,如下:
- 因为是将很多类作为成员封装进一个门面类里, 所以是结构型的设计模式。
举例: 做饭(买菜、洗碗、烧菜,希望封装到一个仆人类里来做)
代理模式#
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
代理模式中, 提供的行为和被代理对象是基本一致的,只是会额外做一些处理(例如打日志、监控),再调用被代理对象的方法。
代理模式和其他模式的区别#
- 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
- 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
- 和外观模式的区别: 外观模式是可以封装好几个类,提供特定的单方法或者组合方法。 而代理模式大多是针对一个类做代理,且对外方法与被代理对象 基本一致。
- 和仲裁者模式的区别: 仲裁者更多是三方 ABC交互,由B承担沟通工作,A不需要直接调用C。 代理模式则只涉及代理和被代理者。