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

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


一、单一责任原则(SRP)

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

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

应将其按功能进行拆分。

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

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

1.对扩展性的开放

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

2.对修改的封闭

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

关键:抽象技术

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

三、Liskov替换原则(LSP)

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

对于Liskov替换原则的具体介绍与应用,详见我之前的文章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,包括其基本内涵、操作方法和具体实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值