0 - 概要
五大原则简称:SOLID
S-SingleResponsibility-单一职责原则
O-OpenClose-开闭原则
L-LiskovSubstituion-里氏替换原则
I-InterfaceSegregation-接口隔离原则
D-DependencyInversion-依赖倒置原则
1 - 单一职责原则
核心思想:
一个类,最好只做一件事,只有一个引起它的变化。
单一职责原则可以看作是低耦合高内聚思想在面向对象上的引申,将职责定义为引起变化的原因,通过减少引起变化的原因(单一职责),来提高类的内聚性。当一个类的职责过多时,引起它变化的原因就会增多,这将导致职责间的互相依赖增多,从而就破坏了耦合度和内聚性。
主要原则:
无
示例:
// 历史做法
class Calculator {
int a;
int b;
public Calculator(int a, int b) {
this.a = a;
this.b = b;
}
public int add() {
return a + b;}
public int sub() {
return a - b;}
public int mul() {
return a * b;}
public int div() {
return a / b;}
}
# 此时若要新增一个阶乘计算,就得在原始类中进行修改,一招不慎就可能引入新的复杂度和带来异常
// 单一职责做法
class Calculator {
int a;
int b;
public Calculator(int a, int b) {
this.a = a;
this.b = b;
}
}
class Add extends Calculator {
public Add() {
super(a, b);
}
public int add() {
return a + b;}
}
class Sub extends Calculator {
public Sub() {
super(a, b);
}
public int sub() {
return a - b;}
}
class Mul extends Calculator {
public Mul() {
super(a, b);
}
public int mul() {
return a * b;}
}
class Div extends Calculator {
public Div() {
super(a, b);
}
public int div() {
return a / b;}
}
# 此时若要新增一个新的职责,则再添加一个类来负责。如此这般,不会在已有类中引入额外的复杂度,也不会带来额外的理解成本,同时也保障了类间的低耦合。
图示:
2 - 开放-封闭原则
核心思想:
软件实体应该是可扩展、而不可修改的。也就是对扩展开放,对修改封闭。
大白话就是:在增加新功能的时候,能不改代码就尽量不要改,如果只增加代码就完成了新功能,那是最好的。
主要原则:
对扩展开放,意味着当有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况;
对修改封闭,意味着类一旦设计完成,就可以独立完成工作,而不要对其进行任何修改的尝试;
要做到这两点主要就是,要对抽象编程,不要对具体编程,因为抽象是相对稳定的。
示例:
书店售书例子
1. 不满足开闭原则
public interface IBook {
public int price();
public String name();
public String author();
}
public class Book implements IBook {
public