Single responsibility principle 单一职责原则
一个类应该有且仅有一个去改变他的理由,这意味着一个类应该只有一项工作。
public class AreaCalculator {
private float result;
public float calculateArea(Shape s){
//计算面积
}
public String printArea(){
//打印面积
}
}
这个类的作用应该是计算面积,不应该负责去打印面积,违反了单一职责原则
改进:
public class AreaCalculator {
private float result;
public float getResult(){
return this.result;
}
public float calculateArea(Shape s){
}
}
public class Printer{
public String print(AreaCalculator as){
System.out.println(as.getResult());
}
}
Open close principle 开放封闭原则
对象或实体应该对扩展开放,对修改关闭
public class AreaCalculator {
public float calculateArea(Triangle t){
//打印三角形面积
}
public float calculateArea(Rectangle t){
//打印矩形面积
}
}
改进:
public class AreaCalculator {
public float calculateArea(Shape s){
}
}
Liskov substitution principle 里氏替换原则
任何一个子类或者派生类用改可以替换它们的基类或父类
public class Shape{
//打印体积
abstract public float calculateVolumn();
abstract public float calculateArea();
}
public class Rectangle extends Shape{
//矩形 矩形不能打印体积,所以不应该继承Shape类
}
public class Cube extends Shape{
//正方体
}
interface segregation principle 接口分离原则
不应该强迫一个类实现它用不上的接口
public interface Shape{
//打印体积
abstract public float calculateVolumn();
abstract public float calculateArea();
}
public class Rectangle implements Shape{
//矩形 矩形不能打印体积,所以不应该实现Shape接口
}
public class Cube implements Shape{
//正方体
}
Dependency inversion principle 依赖反转原则
抽象不应该依赖于具体实现,具体实现应该依赖于抽象
public class AreaCalculator {
private float result;
public float getResult(){
return this.result;
}
public float calculateArea(Shape s){
if(s==Triangle){
this.result=b * h / 2;
}else if(s==Rectangle){
this.result=l * w;
}
}
}
改进:
public interface Shape{
public float getArea();
}
public class Triangle implements Shape{
public float getArea(){
return b * h / 2;
}
}
public class AreaCalculator {
private float result;
public float getResult(){
return this.result;
}
public float calculateArea(Shape s){
this.result=s.getArea();
}
}