zoukankan      html  css  js  c++  java
  • 设计模式6大基本原则之(二)

        上一篇博客中介绍了设计模式6大基本原则的前三个,这篇博客将着重介绍剩下的三个基本原则。

    里氏代换原则(Liskov Substitution Principle)

        子类必须可以替换掉它的父类。也就是说子类可以扩展父类的功能,但不能改变父类原有的功能。

    遵循里氏代换原则的优点?

        因为子类型的可替换性才使得使用父类的模块在无需改动的情况下就能够扩展。

        打个例如说,香蕉是水果的一种,香蕉具有水果的特性。假如有一天我们须要再添加苹果、橘子、苹果拥有水果

    的特性,因为都是继承于水果,除了更改实例化的地方程序的其它地方不须要改动。

         小编寄语:我认为里氏代换原则是继承的特殊形式,里氏代换原则对继承做了要求,遵循里氏代换的子类包括

    于继承。通过里氏代换原则使扩展性增强,实现了开放—封闭原则。

    迪米特法则(Law Of Demeter)

        假设两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。假设当中一个类须要调用还有一个类

    的某一方法的话,能够通过第三者转发这个调用。

    问题的由来?

        类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对还有一个类的影响也越大。

       小编寄语:举个样例比方我们去饭店吃饭,我们并不须要直接去找厨师,假设每一个人都找厨师说自己吃什么那么

    出事的额效率该有多低啊,所以最好的办法是找一个“中介”也就是服务员,顾客通过服务员向厨师传递信息。这样

    厨师仅仅管做饭就能够了,饭店的效率就大大提升了。事实上也就是减少了顾客和厨师之间的耦合度。又回归到面向对象

    的原则上了。

        凡是都有个度,比方将全部的信息都通过“中介”来传递信息,那么就会导致“中介”信息信息量变大,系统的

    复杂程度加大。所以在採用迪米特法则时要重复权衡,既做到结构清晰,又要高内聚低耦合。

    接口隔离原则(Interface Segregation Principle)

        client不应该依赖它不须要的接口;一个类对还有一个类的依赖应该建立在最小的接口上。

    怎么实现?

        将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们须要的接口建立依赖关系。也就是採用接口隔离原则。

    接口隔离与单一职责的差别与联系?

        非常多人会觉的接口隔离原则跟之前的单一职责原则非常相似,事实上不然。其一,单一职责原则原注重的是职责;而

    接口隔离原则注重对接口依赖的隔离。其二,单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中

    的实现和细节;而接口隔离原则主要约束接口接口,主要针对抽象,针对程序总体框架的构建。

        小编寄语:举个样例,接口就好比在十字路口行车,假设没有红绿灯,全部车都自由行使,那么交通必定非常是拥

    挤,也会事故不断。但假设有了红绿灯,不同的时间人们走不同的路线,将十字路口分了好几个方向,这样效率就会

    大大提高。

        运用接口原则时要注意:

    接口尽量小,可是要有限度。对接口进行细化能够提高程序设计灵活性是不挣的事实,可是假设过小,则会造成接口

    数量过多,使设计复杂化。所以一定要适度。

        为依赖接口的类定制服务,仅仅暴露给调用的类它须要的方法,它不须要的方法则隐藏起来。仅仅有专注地为一个模

    块提供定制服务,才干建立最小的依赖关系。提高内聚,降低对外交互。使接口用最少的方法去完毕最多的事情。

    运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。

    文末小结

        六大设计原则告诉们:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依

    赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要

    减少耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对改动关闭。

        设计模式的6大基本原则,事实上是在面向对象的基础上发展而来的,通过他们实现了面向对象的三大基本特性继

    承、封装和多态,从而提高程序的内聚性减少耦合性,使程序可维护、复用、可扩展、灵活性好。可是一切事物都有

    个度,在运用这些原则的时候不能一味地生硬的用下去,在用之前一定要好好思量,从系统的总体性能出发,最大限

    度地提高系统的灵活性。

  • 相关阅读:
    python自动更新chromedriver与chrome兼容
    Python生成exe可执行文件
    windows下安装python 且 安装pip
    python运行的时候报错line 192, in _run_module_as_main return _run_code(code, main_globals, None 解决方案
    log4j2配置文件log4j2.xml
    log4j配置文件中的additivity属性
    Druid作连接池的数据库的主从动态切换
    Win10进入安全模式的方法
    Win10复制文件或是从网站另存图片提示“客户端没有所需的特权”怎么解决?
    druid添加log4j2
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3908562.html
Copyright © 2011-2022 走看看