1. 三种模式的含义
1.1 代理模式
代理和被代理者继承自同一个类,是为其他对象提供一种代理以控制对这个对象的访问;
1.2 外观模式
为子系统中的一组接口提供一个高层接口,这个接口使子系统更容易使用;
Facade中的每个接口可能使用了不同子系统的一系列接口;
外观模式并不是把子系统的接口隔离起来,只是对外提供了一个更简单明了的接口,用户依然可以直接使用子系统提供的接口;
同时外观模式把用户和子系统进行了解耦,客户可以不用去关心具体是哪个子系统,这样当子系统发生变化时,可以也就感知不到了;
1.3 适配器模式
适配器模式可以在我们需要的接口和提供的接口不一致时使用,一般在Adepter中将Adaptee对象作为其成员变量,然后在其方法中调用Adeptee提供的接口;
2. 三者对比
这三种模式都是在一个类上进行了一层封装,只是各自的目的(意图)不同;
代理模式是为了控制对原始对象的访问进行了一层封装,在Proxy中调用真正对象的接口,并可能进行一些额外的工作(如智能指针);
外观模式是为了减小接口的复杂度,在Facade类中提供的一个方法可能集成了多个子系统的不同方法,这些方法协同完成一个功能,这样客户直接使用Facade类提供的方法就比较简单;外观模式的意图是提供一个简化的接口给用户使用;
适配器模式使两个不配套的东西能够协同工作(例如现实中最常见的电压适配器),通过适配器,调用真正的接口,这样客户就不需要感知和变动;也就是说适配器模式的意图是改变一个类的接口,使其符合客户的需求;
3. 迪米特法则
迪米特法则又叫最少知道原则,也就是尽量少的和其他实体发生关联,不要让太多的类耦合在一起,免得牵一发动全身;
也就是在对象的方法内部,只调用本对象的方法/传递进来的对象/方法中实例化/对象中实例化的对象方法;