接口隔离原则

近来换工作,做一些保密的项目,由于项目时间比较赶,有段时间没有更新博客了. 老铁们,现在继续走起.废话不多说了,直接上;
接口隔离原则定义

接口隔离原则的定义如下:
		客户端不应该依赖那些它不需要的接口.
			注意,在该定义中的接口指的是所定义的方法.
另一种定义方法如下:
     	一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端  
   仅需要知道与之相关的方法即可.
   使用接口隔离原则拆分接口时,首先必须满足单一职责原则,将一组相关的操作定义在一
个接口中,且在满足高内聚的前提下,接口中的方法越少越好.可以在进行系统设计时采
用定制服务的方式,即为不同的客户端提供宽窄不同的接口,只提供用户需要的行为,而
隐藏用户不需要的行为.

#接口隔离原则理解

接口隔离原则是指使用多个专门的接口,而不适用单一的总接口.每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干.    
(1):一个接口就只代表一个角色,每个角色都有它特定的一个接口,此时这个原则可以叫做"角色隔离原则".
(2):接口仅仅提供客户端需要的行为,即所需的方法,客户端不需要的行为隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口.

####合成复用原则定义

	合成复用原则又称为组合/聚合复用原则,其定义如下:
		尽量使用对象组合,而不是集成来达到复用的目的.
    
    合成复用原则就是指在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的.简言之:要尽量使用组合/聚合关系,少用继承.

在面向对象设计中,可以通过两种基本方法在不同的环境中复用已有的设计和实现,即通过组合/聚合关系或通过继承
	组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时进行动态进行.("黑箱"复用);
	继承复用:实现简单,易于扩展.破坏系统的封装性,从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用.("白箱"复用);

迪米特法则定义

	迪米特法则又称为最少知识原则,它有多种定义方法,其中几种典型定义如下:
		(1):不要和"陌生人"说话.
		(2):只与你的直接朋友通信.
		(3):每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位.

在迪米特法则中,对于一个对象,其朋友包括以下几类:

(1)当前对象本身;
(2):以参数形式传入到当前对象方法中的对象;
(3):当前对象的成员对象;
(4):如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;
(5):当前对象所创建的对象.
任何一个对象,如果满足上面的条件之一,就是当前对象的"朋友",否则就是"陌生人".

迪米特法则分析

   迪米特法则可分为狭义法则和广义法则.在狭义的迪米特法则中,如果两个类之间不
必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中的一个类需要调
用另一个类的某一个方法的话,可以通过第三者转发这个调用.

迪米特法则的主要用途在于控制信息的过载:

1:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;
2:在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;
3:在类的设计上,只要有可能,一个类型应当设计成不变类;
4:在对其他类的引用上,一个对象对其他对象的引用应当降到最低.

但是过度使用迪米特法则,也会造成系统的不同模块之间的通信效率降低,使系统的不同模块之间不容易协调等缺点.同时,因为迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,这些类存在的唯一原因是为了传递类与类之间的相互调用关系,这就毫无疑问的增加了系统的复杂度.解决这个问题的方式是:使用依赖倒转原则(通俗的讲就是要针对接口编程,不要针对具体编程),这要就可以是调用方和被调用方之间有了一个抽象层,被调用方在遵循抽象层的前提下就可以自由的变化,此时抽象层成了调用方的朋友.

迪米特法则理解

广义的迪米特法则:指对对象之间的信息流量,流向以及信息的影响的控制,主要是对
		信息隐藏的控制.信息的隐藏可以使各个子系统之间脱耦,从而允许它们独立地被
		开发,优化,使用和修改,同时可以促进软件的复用,由于每一个模块都不依赖于其他
		模块而存在,因此每一个模块都可以独立地在其他的地方使用.一个系统的规模越
		大,信息的隐藏就越重要,而信息隐藏的重要性也就越明显.

你可能感兴趣的:(设计模式,迪米特法则,合成复用原则,接口隔离原则)