面向对象五大设计原则——SOLID

在软件设计过程中,遵循面向对象的五大原则——SOLID,可提高软件健壮性和稳定性。 它们分别指的是: 1.单一责任原则(SRP) 2.开放-封闭原则(OCP) 3.Liskov替换原则(LSP) 4.接口隔离原则(ISP) 5.依赖转置原则(DIP)

一、单一责任原则(SRP)

单一责任原则是指单一的类或模块只负责单一功能。 如果一个类包含了多个责任,那么将引起不良后果:

    引入额外的包,占据资源 导致频繁的重新配置、部署等

应将其按功能进行拆分。

二、开放-封闭原则(OCP)

开放-封闭原则包含两部分内容:

1.对扩展性的开放

模块的行为应该是可扩展的,从而该模块可表现出新的行为以满足需求变化。

2.对修改的封闭

模块自身的代码是不应被修改的, 扩展模块的行为的一般途径是修改模块的内部实现, 如果一个模块不能被修改,那么它通常被认为是具有固定的行为。

关键:抽象技术

对抽象的类(抽象类/接口)产生依赖,而不是对具体的类产生依赖。

三、Liskov替换原则(LSP)

LSP原则的核心思想是指:子类型必须能够替换其基类型,派生类必须能通过基类的接口使用,客户端无需了解二者之间的差异。

对于Liskov替换原则的具体介绍与应用,详见我之前的文章

四、接口隔离原则(ISP)

不能强迫客户端依赖于它们不需要的接口:只提供必须的接口。 在创造接口时,尽可能创造多个专门的接口,而不是一个包含多功能的总接口。 例如: 以下这个结构中,RobotWorker类中必须被强制实现它所不需要eat方法,这种接口定义方式是不好的。

interface Worker{
          
   
  void work();
  void eat();
}
ManWorker implements Worker{
          
   
  void work(){
          
   ...};
  void eat(){
          
   ...};
}
RobotWorker implements Worker{
          
   
void work(){
          
   ...};
void eat(){
          
   //Not Appliciable for a RobotWorker};
}

应将接口优化为以下形式:

interface Workable{
          
   
  public void work();
}
interface Feedable{
          
   
  public void eat();
}
ManWorker implements Workable,Feedable{
          
   
  void work(){
          
   ...};
  void eat(){
          
   ...};
}
RobotWorker implements Workable{
          
   
  void work(){
          
   ...};
}

五、依赖转置原则(DIP)

抽象的模块不应依赖于具体的模块,具体应依赖于抽象。 例如: 以下这个结构中,都是直接调用具体方法,并没有具体依赖于抽象。

void Copy(OutputStream dev){
          
   
int c;
while((c = ReadKeyboard())!= EOF)
   if (dev == printer)
     writeToPrinter(c);
   else
     wriyeToDisk(c);
}

应将优化为以下形式:

interface Reader{
          
   
  public int read();
}
interface Writer{
          
   
  public int write(c);
}
class Copy{
          
   
 void Copy(Reader r, Writer w){
          
   
    int c;
    while (c = r.read() != EOF)
       w.write(c);
  }
}

总结

以上就是本篇文章要讲的内容,本文讲解了面向对象的五大设计原则SOLID,包括其基本内涵、操作方法和具体实例。

经验分享 程序员 微信小程序 职场和发展