基本设计原则

 六大基本设计原则:

1、单一职责原则

2、里氏替换原则

3、依赖倒置原则

4、接口隔离原则

5、迪米特原则

6、开闭原则

 

 

单一职责原则(Srp

定义:应该 有且仅有一个原因引起类的变更。即单一职责原则要求一个接口或类只有一个原因引起变化,也就是一个接口或类只有一个职责,他就负责一件事情。

职责是很难定义的一个概念 ,我们把握一个度,就是合理的划分职责,不能耦合度 太强,也不能拆分的类太多。(原则是死的,人是活的)

好处:

1、类的复杂性降低,实现什么职责都有清晰明确的定义;

2、可读性提高;

3、可维护性提高;

4、变更引起的风险降低,变更是必不可少的的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他接口无影响,这对系统的扩展性、维护性都有非常大的帮助。

里氏替换原则

定义:只要父类出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本不需要 知道父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。

 

在面向对象的语言中,继承是必不可少;

继承的优点为:

1、代码共享,减少创建的类的工作量,每个子类都拥有父类的方法和属性;

2、提高代码的重用性;

3、子类可以形似父类,但又异于父类;

4、提高代码的可扩展性;

5、提高产品或者项目的开放性

缺点:

1、继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法;

2、降低了代码的灵活性。子类 必须拥有父类的属性和方法,让子类的自由世界中多了些约束;

3、增强了耦合性。当父类的常量、变量和方法被修改时,需要考虑子类的修改 ,而且在缺乏规范的环境下,这种修改可能让大段2的代码需要重构;

依赖倒置原则(大项目必须)

定义:

       1、高层模块不应该依赖低级模块,两者都应该依赖其抽象;

       2、抽象不应该依赖细节;

       3、细节应该依赖抽象;

高层模块和低级模块的定义:每一个逻辑的实现都是由原子逻辑组成的,不可分割的 原子逻辑就是低级模块,原子逻辑再组装就是高级模板;

抽象:指接口或抽象类,两者都是不能直接被实例化的;

细节:细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以被实例化,也就是可以加上一个关键字 new产生的 一个对象。

 

依赖倒置原则的表现:

1、模块间的依赖 通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系就是通过接口或者 抽象类产生的 ;

2、抽象或实现类不依赖于实现类;

3、实现类依赖接口 或抽象类;

 

也就是面向接口编程;

 

依赖倒置的本质就是通过抽象(接口或抽象类),使各个类或模块实现彼此独立,不相互影响,实现真正的松耦合;

在项目中的体现:

1、每个类尽量都有接口或实现类 ,或者抽象类或接口两者都具备;

2、变量的表面类型尽量是接口或抽象类;

3、任何类都不应该从具体类派生;

4、尽量不要覆写基类的方法 ;

5、即合理实体化原则使用;

接口隔离原则

接口类型:

1、实例接口:在 Java中声明一个类,然后用new关键字产生一个实例,,他是对一个类型的事物的描述,这是一种接口;例如你定义了一个Person类,然后使用Person zhangsan = new Person();产生一个实例,这里Person类就是zhangsan 的接口;

 

2、类接口:Java中经常使用的interface关键字定义的接口;

 

隔离定义:

1、客户端不应该依赖它不需要的接口;依赖它需要的接口客户端需要什么接口就 提供什么接口,把不要的接口剔除掉,这就需要对接口进行细化,保证其纯洁性;

2、类间的依赖关系应该建立在最小的接口上;它是要求接口最小 ,也是要求接口细化,接口纯洁;

即建立单一接口,不要建立臃肿庞大的接口,通俗来讲就是接口尽量细化,同时接口中的方法尽量的少;单一职责要求的是类和接口职责单一,注重的是职责,这是业务逻辑的划分。而接口隔离原则要求的是接口的方法尽量的少,注意区分。

 

最佳实践:

       接口隔离原则是对接口的定义,同时也是对类的定义,接口 和类尽量使用原子接口和类;

1、一个接口只服务于一个子模块或业务逻辑;

2、通过业务逻辑压缩接口中的public方法

3、已经被 污染了的接口,尽量去修改,若变更的风险较大,则采用适配器模式进行转化处理;

4、了解环境,拒绝盲从不要盲目的模仿网上的代码,要深入了解逻辑,设计出最好的接口。

迪米特法则

定义:一个对象应该对其他对象 有最少的了解,通俗来讲,一个类应该对自己需要耦合或 调用的类知道的最少,被耦合或调用的类的内部是如何复杂和我没有关系;

1、只与直接的朋友交流:

 

 

迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了之后 ,类的复用率才可以提高。

 

开闭原则    

定义:

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭;(一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化)

 

软件实体包括:

1、项目或软件产品中按照一定的逻辑规则划分的模块

2、抽象和类

3、方法

 

猜你喜欢

转载自taoyongpan.iteye.com/blog/2369209
今日推荐