zoukankan      html  css  js  c++  java
  • [转] SOLID五大设计原则

    我们知道,面向对象对于设计出高扩展性、高复用性、高可维护性的软件起到很大的作用。我们常说的SOLID五大设计原则指的就是: 
        
      S = 单一职责原则 Single Responsibility Principle 
      O = 开放闭合原则 Opened Closed Principle  
      L = Liscov替换原则 Liscov Substitution Principle 
      I = 接口隔离原则 Interface Segregation Principle 
      D = 依赖倒置原则 Dependency Inversion Principle 
        
      我们一一去解说面向对象的五大设计原则: 
      1. 单一职责原则 
      引起类变化的因素永远不要多于一个,或者说:一个类有且只有一个职责。 
      如果类包含多个职责,代码会变得耦合;SRP看起来是把事物分离成分子部分,以便于能被复用和集中管理,这点也同样适用于方法级别。 
        
      2. 开放封闭原则 
      软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。 
      如图:客户端和服务段都耦合在一起。那么,只要出现任何变化,服务端变化了,客户端一样需要改变。 
      面向对象设计SOLID五大原则的经典解说 
        
      下面则是正确的设计:对外关联接口或者抽象类 
      面向对象设计SOLID五大原则的经典解说 
        
      3.Liskov’s 替换原则 
      子类型必须能够替换它们基类型,或者说使用基类引用的函数必须能使用继承类的对象而不必知道它。 
      为什么LSP这么重要: 
      ● 如果没有LSP,类继承就会混乱;如果子类作为一个参数传递给方法,将会出现未知行为; 
      ● 如果没有LSP,适用与基类的单元测试将不能成功用于测试子类; 
        
      4. 接口分离原则 
      客户端不应该被迫依赖于它们不用的接口 
      接口应该仅包含必要的方法,而不该包含其它的。比如: 
      面向对象设计SOLID五大原则的经典解说 
      注意到IBird接口包含很多鸟类的行为,包括Fly()行为.现在如果一个Bird类(如Ostrich鸵鸟)实现了这个接口,那么它需要实现不必要的Fly()行为(Ostrich不会飞). 这个”胖接口”应该拆分未两个不同的接口,IBird和IFlyingBird,IFlyingBird继承自IBird. 这里如果一种鸟不会飞(如Ostrich),那它实现IBird接口。如果一种鸟会飞(如KingFisher),那么它实现IFlyingBird 
        
      5. 依赖倒置原则 
      高层模块不应该依赖底层模块,两者都应该依赖其抽象。 
      比如说一个汽车类: 
      class Car{ 
         AmericanEnginee e; //这样是不对的,应该依赖于接口,必须写成IEngine e; 
      } 
      如果代码中不用依赖倒置,我们将面临如下风险: 
      ● 使用低级类会破环高级代码; 
      ●当低级类变化时需要很多时间和代价来修改高级代码; 
      ● 产生低复用的代码; 
       
     
        
      除SOLID原则外还有很多其它的面向对象原则。如: 
      “组合替代继承”:这是说相对于继承,要更倾向于使用组合; 
      “笛米特法则”:这是说”你的类对其它类知道的越少越好”; 
      “共同封闭原则”:这是说”相关类应该打包在一起”; 
      “稳定抽象原则”:这是说”类越稳定,越应该由抽象类组成”; 

  • 相关阅读:
    [翻译]AxureBasic Interactions原型设计工具Axure学习第1.3节
    [翻译]AxurePage Properties原型设计工具Axure学习第1.2节
    更新数据库表的某一字段为限制范围的随机数
    silverlight带水印的自定义TextBox控件(版本2)
    silverlight带水印的TextBox
    [翻译]AxureMasters原型设计工具Axure学习第2.2节
    [翻译]AxureBuild Wireframes原型设计工具Axure学习第1.1节
    [翻译]Windows Phone(Silverlight) 控件数据绑定
    [翻译]AxureDynamic Panel(Basic)原型设计工具Axure学习第2.1节
    假如你是新浪微博移动方向的产品经理
  • 原文地址:https://www.cnblogs.com/fan-yuan/p/3513779.html
Copyright © 2011-2022 走看看