一.面向对象设计原则
概述
通常认为,一个易于维护的系统就是复用率高的系统,而复用性较好的系统就是易于维护的系统。对于面向对象的软件系统来说,在支持可维护性的同时提高系统的可复用是一个核心问题。
可维护性低的软件特性:过于僵硬,过于脆弱,复用率低,黏度过高。
一个好的系统应该具备如下特质:可扩展性,灵活性,可插入性。
![](https://i-blog.csdnimg.cn/blog_migrate/8f8ccfda45447b03776324e74f9d60e3.jpeg)
单一职责原则
定义:一个对象应该只包含一个单一的职责,即一个类只做一件事,不能将太多的职责放入一个类中。它用于控制类的粒度大小。
实例:例如我们数据库层面的操作中,规定一个userDao类只做用户表的增删改查功能。
开闭原则
定义:一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的前提下改变这个模块的功能。软件实体可以是一个软件模块,一个由多个类组成的局部结构,一个单低的类。
实例:例如Mabatis框架中简单的对表增删改查功能的实现,只需要在xml文件中更改相关的sql语句即可修改该代码的功能。
里氏代换原则
定义:子类对象必须可以替换掉他们的父类型,且程序不会有任何的错误。它是实现开闭原则的重要方式之一。
依赖倒转原则
定义:高层模块不应该依赖于底层模块,他们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。即依赖抽象类和接口,而不依赖具体的实体类。在抽象类或者接口中定义功能,由其子类去实现具体的细节,而不是子类继承具体的实体类父类。
类之间的耦合(依赖关系):
零耦合关系(没有耦合关系),具体耦合关系(耦合发生在两个具体的实现类),抽象耦合关系(耦合发生在一个具体类和抽象类之间)。
依赖注入:依赖注入就是将一个类的对象传入另一个类,注入时尽量注入父类对象,而在程序运行时再通过子类对象覆盖父类对象。一般分为构造注入(通过类的构造器),设值注入(通过类的setter方法),接口注入(通过接口具体实现方法)。
实例:Spring框架中进行bean的管理并对类的成员变量赋值操作.
接口隔离原则
定义:一旦一个接口过大,则需要将它分割成一些细小的接口,使用该接口的客户端只需要知道与之相关的方法即可。
在使用接口隔离原则时应注意接口的粒度,接口不能太大,也不能太小。一般而言,接口中仅包含为某一类用户定制的方法即可。
合成复用原则
定义:又称为组合/聚合复用原则,尽量使用对象组合,而不是继承来达到复用目的。即多使用关联关系,少使用继承关系。
迪米特法则
定义:又称为最少知识原则,指一个软件实体应当尽可能少的与其他实体发生相互作用。这样,当一个模块修改时,就会尽量少的影响其他的模块,扩展相对容易。这是对软件实体之间通信的限制,它要求软件实体之间通信的深度与宽度。
注意:
类之间的耦合度越低,越有利于复用。
每一个类应当降低其成员变量和成员方法的访问权限。
一个对象对其他对象的引用应降到最低。
二.设计模式概述
定义
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用这些设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
简单来说就是一套前人的经验。帮助我们更好的编写代码。
分类
根据其目的(模式是用来做什么的)可以分为三类:创建型,结构型,行为型。
创建型模式主要用于创建对象,GoF主要提供了5种创建型模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,和单例模式。
结构型模式主要处理类或对象的组合,GoF提供了7种模式,分别是适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
行为型模式主要用于描述类或对象怎样交互和怎样分配职责,GoF提供了十一种行为型模式,分别是职责链、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
根据范围分类(模式主要处理对象之间的关系还是类之间的关系)
类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,属于静态的。
对象模式处理对象间的关系,这些关系在运行时刻发生变化,更具动态性。
简介
![](https://i-blog.csdnimg.cn/blog_migrate/3a20b369bde69c1ba94011742c9d0154.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/da0c456713ce8db2ed2c12ac88812168.jpeg)