【C#】S.O.L.I.D

【前言】

  S.D.L.I.D是什么?相信想学过面向对象的菜鸟们,对这几个字母应该都不会陌生,这是由Rober C.Martin提出的面向对象设计头五大原则。当然,对于面向设计还不成气候的我这篇文章只是肤浅的字面含义~

【正文】

  让小编带你来看一看这五大原则是怎么帮助我们成为优秀的开发人员的吧~
  
  · S – 单一职责原则
  · O – 开放封闭原则
  · L – 里氏替换原则
  · I – 接口隔离原则
  · D – 依赖倒置原则

  这些原则,对我们维护,扩展,重构都有很大的帮助,实在是可以避免一些代码冗余等常见的问题。

· S – 单一职责原则

  Single Responsibility Principle (SRP) – 职责单一原则指出:

  一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作,也就是说影响类改变的原因只有一件事。

  单一职责可以是类级别的单一,也可以是行为上的单一

  · Unix/Linux是这一原则的完美体现者。各个程序都独立负责一个单一的事。
  · Windows是这一原则的反面示例。几乎所有的程序都交织耦合在一起。

· O – 开放封闭原则

  Open/Closed Principle (OCP) – 开闭原则:

  对象或实体应该对扩展开放,对修改封闭。

  对于面向对象来说,需要你依赖抽象,而不是实现,23个经典设计模式中的“策略模式”就是这个实现。对于非面向对象编程,一些API需要你传入一个你可以扩展的函数,比如我们的C 语言的qsort()允许你提供一个“比较器”,STL中的容器类的内存分配,ACE中的多线程的各种锁。对于软件方面,浏览器的各种插件属于这个原则的实践。

  这就意味着一个类应该无需修改类本身但却容易扩展。

  · 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
  · 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

· L – 里氏替换原则

  Liskov substitution principle (LSP) – 里氏代换原则:

  每一个子类或派生类应该可以替换它们基类或父类,通俗的来说就是子类可以扩展父类的功能,但不能改变父类原有的功能。

  这个原则让你考虑的不是语义上对象的间的关系,而是实际需求的环境,这句话有两个很经典的案例–“正方形不是长方形”和“鸵鸟不是鸟”。通过这两个案例,你会明白《墨子 小取》中说的 ——“娣,美人也,爱娣,非爱美人也….盗,人也;恶盗,非恶人也。”——妹妹虽然是美人,但喜欢妹妹并不代表喜欢美人。盗贼是人,但讨厌盗贼也并不代表就讨厌人类。

  在很多情况下,在设计初期我们类之间的关系不是很明确,LSP则给了我们一个判断和设计类之间关系的基准:需不需要继承,以及怎样设计继承关系。

· I – 接口隔离原则

  Interface Segregation Principle (ISP) – 接口隔离原则:

  不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法。

  举个例子,我们对电脑有不同的使用方式,比如:写作,通讯,看电影,打游戏,上网,编程,计算,数据等,如果我们把这些功能都声明在电脑的抽类里面,那么,我们的上网本,PC机,服务器,笔记本的实现类都要实现所有的这些接口,这就显得太复杂了。所以,我们可以把其这些功能接口隔离开来,比如:工作学习接口,编程开发接口,上网娱乐接口,计算和数据服务接口,这样,我们的不同功能的电脑就可以有所选择地继承这些接口。

  · 接口隔离原则意思是把功能实现在接口中,而不是类中,使用多个专门的接口比使用单一的总接口要好。

· D – 依赖倒置原则

  Dependency Inversion Principle (DIP) – 依赖倒置原则

  最后一条,但肯定不是最无足轻重的一条:

  实体必须依靠抽象而不是具体实现。它表示高层次的模块不应该依赖于低层次的模块,它们都应该依赖于抽象。

  举个例子,墙面的开关不应该依赖于电灯的开关实现,而是应该依赖于一个抽象的开关的标准接口,这样,当我们扩展程序的时候,我们的开关同样可以控制其它不同的灯,甚至不同的电器。也就是说,电灯和其它电器继承并实现我们的标准开关接口,而我们的开关产商就可不需要关于其要控制什么样的设备,只需要关心那个标准的开关标准。这就是依赖倒置原则。

  这就好像浏览器并不依赖于后面的web服务器,其只依赖于HTTP协议。这个原则实在是太重要了,社会的分工化,标准化都是这个设计原则的体现。

【小结】

  虽然这看起来很棘手,但只要通过连续使用并遵守其指导方针,它就会变成你和你的代码的一部分,可以让你的代码很容易地扩展、修改、测试和重构,不出任何问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值