六大设计原则

  • 开闭原则

          定义:软件实体(模块、类、方法)应该对扩展开放,对修改关闭,即当软件需要变化的时候,应该通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码;
    
          客户的需求是不稳定的,通过扩展已有的软件系统而不是通过修改软件系统来满足客户的需求, 这样的软件系统就满足开-闭原则,即软件系统要有一定的灵活性和适应性。
    
          实现开闭原则的关键:
          抽象化是解决问题的关键,在面向对象的编程语言里,可以给系统定义出一套相对较为固定的抽象设计,此设计允许无穷无尽的行为在实现层被实现。在语言里,可以给出一个或多个抽象类或者接口,规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层。这个抽象层预见了所有的可扩 展性,因此,在任何扩展情况下都不会改变。这就使得系统的抽象不需要修改,从而满足了开闭原则的第二条,对修改关闭。同时,由于从抽象层导 出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的,这就满足了开闭原则的第一条。

  • 单一职责原则

          适用范围:接口、类、方法;
          定义:不要存在多余一个导致类变更的原因,即一个类只负责一项职责;    
          目标:降低类的复杂性、提高代码可读性、降低修改一个功能时对其他功能的影响程度,对应于系统的可维护性+稳定性;
          反例:一个类或者一个方法如果有多项职责,不但代码结构负责,而且其中一个职责的改变可能会影响其余职责的稳定性。
    

  • 里氏替换原则

          适用范围:该原则针对的对象是具有继承关系的父子类;
         定义:只要父类出现的地方子类都可以出现,而且将父类替换为子类也不会引起任何错误或者异常, 即子类可以替换父类,反之则不成立。通俗地理解,就是子类可以扩展父类的功能,但不能改变父类原有的功能。
          
          子类必须完全实现父类的方法,即父类方法必须是子类全部需要的,否则就是违背LSP原则;
         在类中调用其他类时必须使用父类或者接口(所有引用基类的地方必须能透明地使用其子类的对象),否则类的设计违背了LSP原则。


          里氏替换原则有以下4层含义:
          1、子类必须完全实现父类的抽象方法(方法体不能为空);
          2、子类中可以增加自己特有的方法,但不能覆盖父类已有的非抽象方法;
          3、子类重载父类的方法时,子类方法的前置条件(即方法形参)必须比父类方法的输入参数更加宽松;
          4、子类方法实现父类抽象方法时,方法的后置条件(即方法返回值)不能比父类方法更宽松。    
    

  • 依赖倒置原则

        定义:实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的,换种说法是:“抽象不能依赖于具体,而具体应该依赖于抽象”;
          核心思想:面向抽象编程,做到极致,就是面向接口编程;
         目标:实现类之间不直接依赖,降低了类之间的耦合;面向抽象编程,提高了程序的稳定性和可扩展性。
          补充描述:
          依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合;
          每个类应该尽量都有接口或者抽象类,或者两者都有;
          变量的表面类型尽量是接口或者抽象类;
          使用继承时要遵守里氏替换原则。
    

  • 接口隔离原则

          定义:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小接口之上;要建立功能单一或者功能高度相关的接口,而不是去建议一个庞大臃肿大而全的接口来满足所有客户端;尽量细化接口,接口中的方法要尽量少;
          问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。
          解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
          与单一职责原则的区别:单一职责提现在实现上,接口隔离体现在抽象上。
    

  • 迪米特法则(又称最少知道原则)

         定义:一个对象对其依赖的对象知道的越少越好,更简单的定义:只与直接朋友通信(只依赖于直接朋友);
         描述:对于被依赖的对象,无论其实现逻辑多么复杂,都应该尽量地将逻辑分装在对象的内部,对外暴露最少的信息;
         直接朋友:出现在成员变量、方法参数和方法返回值中的类为直接朋友;
         目标:提高内聚、降低耦合;
       补充:合理遵守迪米特法则,可以使程序提高内聚、降低耦合,但过分遵守,会导致大量“中介者”“传递者”类的出现,导致系统复杂度变大。

  • 抽象类原则

          抽象类不会有实例,一般作为父类为子类继承,一般包含这个系的共同属性和方法。
          好的继承关系中,只有叶节点是具体类,其他节点应该都是抽象类。也就是说具体类是不被继承的,将尽可能多的共同代码放到抽象类中。

转载于:https://my.oschina.net/mojiewhy/blog/1819225

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值