单一职责原则
一个类(或接口)只负责实现一个特定功能。定义:就一个类而言,应该只有一个引起它变化的原因。
以数据库为例。数据库的功能可以分为连接、增删改查、UI显示;这就可以分为三个类,连接类,增删改查类、UI显示类。
连接类负责实现连接数据库功能。(只负责连接功能)
增删改查类的成员变量包含连接类,另外实现增删改查功能。(成员方法只负责增删改查功能)
UI更新类的成员变量包含增删改查类,另外实现UI更新的功能。(成员方法只负责更新UI功能)
总结:单一职责原则的好处是1.能实现代码复用,2.高内聚低耦合。
里式替换原则
父类的引用能使用子类的对象。定义:所有引用基类(父类)的地方必须能透明的使用其子类对象。
以动物、猫、狗为例。动物是猫、狗的父类。
动物 a = new 猫();动物 b = new 狗();
(java中对象的实例化格式为 Class1 a = new Class1();这里的Class1是类名)
a,b为父类的引用;new猫(),new狗()为子类的对象。
程序运行时尽量使用基类的类型对引用对象进行定义,在运行时再确定需实例化的子类。
总结:里式替换的目的是实现多态。
依赖倒置原则
定义:抽象不依赖于细节,细节依赖于抽象。
以 学生接口、A校学生类、B校学生类为例。A校学生类、B校学生类都继承了学生接口。
学生接口 a = new A(); 学生接口 b = new B();
依赖倒置原则要求A,B里面只含有学生接口定义过的方法,多余的方法(接口中未定义的方法)在实例对象中无法调用。
程序运行时尽量使用抽象类或者接口对引用对象进行定义,在运行时再确定需实例化的子类。(这种方式也称依赖注入)依赖注入:当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。
接口隔离原则
定义:使用多个专用的接口,而不使用一个单一的总接口。
以数据库的增删改查为例。分别定义增接口、删接口、改接口、查接口;查询类继承查接口,修改类继承增接口、删接口、改接口。
接口隔离原则要求接口仅仅提供客户端需要的行为,而不需要的行为则隐藏起来。(不提供)不提供大接口。
如果一个类继承了多个接口,则无法使用依赖倒置原则。
总结:接口隔离与单一职责一样,提高了代码的可复用。
最小知道原则
如果一个对象需要调用另一个对象的方法,可以通过第三者转发这个调用。定义:一个实体类应尽可能少的与其他实体类发生直接相互作用。
以中介公司为例。小明、A公司是实体类,中介公司充当一个第三者(中间类)。小明想找一份Android的工作,它去跟中介公司说我要一个家政,中介公司收到小明的要求以后查询到A公司能提供家政服务,然后中介公司告诉A公司你要提供一个中介服务给小明。
这样做的好处是降低实体类的耦合度。当A公司不提供家政服务的时候,中介公司会查找另一个符合要求的公司,当B公司新出了一个提供家政服务的功能,只需到中介公司声明一下,可以了。这样做降低了实体类的耦合度,当A公司新出一些功能的时候,只需到中介公司增加相应的方法即可(修改中介类),而不用告诉小明。(一个实体类的改变不影响另一个实体类)
MVP框架使用了这种设计原则。
总结:建立一个中间类可以降低两个实体类直接的耦合。增加代码的复用率(一个服务类可通过中间类为多个实体类进行服务)
开放封闭原则
对扩展开发、对修改封闭。定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
抽象化是开闭原则的关键。
例如现在有一个厨房能提供粤菜、湘菜。需要新增加一个川菜。则为这三个菜提供一个菜接口。三个菜实现这个菜接口。
设计方法的工厂方法使用了这种思想。通过不同的工厂实现不同的方法。
本文到此结束,有收获的给我点个赞吧~