设计模式 - 七大软件设计原则

目录

一、设计模式

1.1、软件设计原则

1.1.1、开闭原则

1.2.2、单一职责原则

1.2.3、里氏替换原则

1.2.4、迪米特原则

1.2.5、接口隔离原则

1.2.6、依赖倒转原则

1.2.7、合成/聚合复用原则


一、设计模式


1.1、软件设计原则

1.1.1、开闭原则

开闭原则:对扩展开放,对修改关闭,也就是说,尽量在不修改原有代码的情况下进行扩展.

通俗来讲,开闭原则就是告诉我们,不要取修改已经完成的程序,而是在原有的基础上进行扩展. 比如在 Java 中,我们设计程序的时候,不要写死,要留有接口,将来如果有什么需要进行扩展,直接在原有的接口上进行开发.

好处:当软件面临新的需求时,可以非常方便的在不修改原有代码的前提下进行扩展,使得软件具有更好的扩展,同时降低维护的成本.

1.2.2、单一职责原则

单一职责原则:一个类只负责一个功能领域中相应的职责.

通俗来讲,单一职责原则就是告诉我们,一个类不能太“累”.  在一个系统中,如果一个类承担的责任的越多,那么他被复用的可能性越小,耦合度很高.  所以我们在设计程序的时候就因该将这些职责封装到不同的类中.

好处:高内聚,低耦合.

1.2.3、里氏替换原则

里氏替换原则:继承必须保证父类所拥有的性质在子类中必须成立.

通俗来讲,里氏替换原则就是告诉我们,子类可以扩展父类的功能,但不能改变父类原有的功能.   也就是说,子类在继承父类的时候,除了添加新的方法用来扩展功能以外,尽量不要重写父类的方法.

子类重写父类方法虽然写起来很方便,但是继承体系的复用性就会很差,特别时多态运用频繁时,程序出错的概论就会很大.  如果不得不违背里氏替换原则,那么建议 “取消原来的继承关系,重新设计他们之间的关系”.

好处:里氏替换时实现开闭原则的重要方式之一; 降低类扩展时给已有的程序造成错误的概率,加强了程序的健壮性,可维护性、可扩展性.

1.2.4、迪米特原则

迪米特原则:一个类应当尽可能少和其他类发生相互作用.  

通俗来讲,就是要求我们在设计软件的时候,尽量减少类之间的交互,如果两个类不彼此直接通信,那么这两个类就不应当直接的相互作用.  如果其中一个类需要调用另一个类的方法,可以通过第三者转发这个调用(通过第三者来降低对象之间的耦合度).

这就好比,在电脑关机的时候,直接点击关机按钮,此时就会关闭其他的运行程序,然后才关闭电源.

好处:降低类之间的耦合,提高代码的复用.

1.2.5、接口隔离原则

接口隔离原则:客户端不因该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小接口上.  也就是说 接口的实现类尽量减少不必要的实现,可以把接口分开. 

通俗来讲,就是说当一个接口太大时,我们需要将他分割成一些小的接口.  每一个接口只需要包含一个客户端(如子模块或者业务逻辑类)所需的方法接口,也叫“定制服务”.

好处:加你个庞大的接口分解成多个粒度小的接口,提高系统的灵活性和可维护性.

1.2.6、依赖倒转原则

依赖倒转原则:高层模块不应该依赖底层模块,二者都因该依赖其抽象;抽象不因该依赖细节,细节因该依赖抽象.

在 Java 中,抽象就是接口或者抽象类,两者都不能被直接实例化,细节就是实现类,因此通俗来讲,就是使用接口或者抽象类制定好规范和契约,不去设计任何具体的操作,把展现细节的任务交给实现类来完成.  总而言之,依赖倒转原则就是面向接口编程.

1.2.7、合成/聚合复用原则

合成/聚合复用原则:也叫做合成复用原则,就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,  而新对象通过对这些对象的委派达到复用已有功能的目的.  尽量使用 对象组合,不要继承来达到复用的目的.

在面向对象设计中,可以通过两种方式实现复用已有设计,首先因该考虑使用 组合/聚合 可以使用系统更加灵活,降低类与类之间的耦合度.  其次才考虑继承,并且使用继承时,需要严格遵循 里氏替换原则.

好处:通过 合成/聚合关系可以将现有对象纳入到新对象中,使之成为新对象的一部分,让新对象可以调用已有对象的功能.  这样做使得成员对象内部实现不可见,达到 “黑箱” 复用.  相对于继承关系而言,进一步降低耦合度.

设计模式 - 七大软件设计原则_第1张图片

你可能感兴趣的:(设计模式,设计模式)