十一、迪米特法则(LoD)
定义:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的摸一个方法的话,可以通过第三者转发这个调用。
1、迪米特法则强调的前提是在类的结构设计上,每个类都应当尽量降低成员的访问权限。
2、类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。
十二、外观模式(Facade)
定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
使用:1、设计阶段初期,应该有意识的将不同的两个层分离,如经典的三层架构
2、开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,facade模式提供一个 简单的接口,减少依赖
3、维护一个遗留的大型系统时,可能这个系统已经很难维护和扩展了,可以设计facade来作为客户和遗留代码的中介
十三、建造者模式(Builder)
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
1、建造者模式可以将一个产品的内部表现与产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
2、如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。
3、建造者模式是逐步建造产品的,所以建造者的Builder类里的那些建造方法必须要足够普遍,以便为各种类型的具体建造者构造。
4、Builder为创建一个Product对象的各个部件指定的抽象接口
5、用于创建一些复杂的对象,这些对象内部构建简的构造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化
6、建造者模式的好处是使得建筑代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
7、建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
十四、观察者模式(Observer或Publish/Subscribe)
定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
1、将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用带来不便。
2、当一个对象的改变需要同时改变其他对象的时候,可以使用观察者模式。
3、观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。
十五、抽象工厂模式
定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
1、所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或if,解除分支判断带来的耦合。