zoukankan      html  css  js  c++  java
  • 面向对象原则之一 接口隔离原则

    前言

    面向对象有人分为五大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则。

    也有人分为六大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则、迪米特法则。

    现在我们来介绍接口隔离原则

    接口隔离原则

    1)概念

    客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。

    怎么理解呢?通俗一点就是说接口尽量细分,把不需要的方法尽量写在2个不同的接口上。

    假如我有一个接口Interface1,有5个方法。其中Class1想实现第1-3个方法,Class2想实现第3-5个方法。

    那么我只有一个Interface1,如果达到上面的要求,Class1与Class2只能实现Interface1的5个方法,如下:

    image

    那么就变得很臃肿了。有什么解决办法呢?接口分离原则很好地解决了以上方法。

    我们把Interface1分离3个接口,然后Class1与Class2分别继承对应的接口,如下:

    image

    这样,很好的消除了冗余。

    2)深入了解

    接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。本文例子中,将一个庞大的接口变更为3个专用的接口所采用的就是接口隔离原则。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

    说到这里,很多人会觉的接口隔离原则跟之前的单一职责原则很相似,其实不然。其一,单一职责原则原注重的是职责;而接口隔离原则注重对接口依赖的隔离。其二,单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中的实现和细节;而接口隔离原则主要约束接口接口,主要针对抽象,针对程序整体框架的构建。

    采用接口隔离原则对接口进行约束时,要注意以下几点:

    • 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
    • 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
    • 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

    运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。

    3)生活中例子

    比如,我们身边的手机,有打电话、支付、摄影、聊天、玩游戏功能。

    我们可以定义一个接口IPhoneOperation来说明这些功能。这样臃不臃肿,要看业务逻辑。

    我们现在定一个业务逻辑,把手机功能分成业余娱乐、生活支付、工作电话。可以拆分接口分别为:

    image

    拆分各种接口后,在业务层面我们更加容易地了解各自的业务功能实现;在代码层面我们更加的高内聚,低耦合。

    其他链接:

    开放封闭原则(开闭原则)

    单一职责原则

    依赖倒置原则

    接口隔离原则

    里氏替换原则

    迪米特法则

  • 相关阅读:
    (OK) port_lighttpd_to_Android——没有基于android 4.4源码
    Linux添加头文件路径—INCLUDE_PATH
    (OK) 交叉编译hello.c for android (--sysroot),不使用Android.mk和ndk-build
    Building and running Node.js for Android
    编译node-v4.2.1,出现错误:undefined reference to getpwuid_r
    我为什么向后端工程师推荐Node.js
    (OK) 编译 pcre-8.37 静态库
    port_lighttpd_to_Android——基于android 4.4源码
    深受C/C++程序员欢迎的11款IDE
    推荐!国外程序员整理的 PHP 资源大全
  • 原文地址:https://www.cnblogs.com/alunchen/p/7115675.html
Copyright © 2011-2022 走看看