接口隔离原则

  • 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件的开发效率,节约软件开发成本和维护成本,我们将在下面的几节中依次来介绍者7条原则,本节介绍里接口隔离原则

接口隔离原则定义

\color{#0000ff}{接口隔离原则(Interface SegregationPrinciple,ISP)}:设计编码过程中尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。

接口隔离原则由来

2002年罗伯特·c·马丁 给“接口隔离原则”的定义是:客户端客户端不应该被迫依赖于它不使用的方法(Clients should not be forced to depend on methods they do not use)。该原则还有另一个定义:一个类对另一个类的依赖应该建立在最小接口上。(The dependency one class to another one should depend on the smallest interface).

为各个类建立他们需要的专用接口,不要试图建立一个庞大的接口供所有依赖他的类调用。
\color{#ff0000}{要注意接口定义的粒度,过小使类的使用变得繁杂,过大会失去灵活性,使用时要实现不必要的接口,增加类的使用风险。}

  • 接口隔离原则和单一职责都是为了提高类的内聚力,降低他们之间耦合度,体现了封装的思想,但两者是不同的:
  1. 单一职责原则注重职责,接口隔离原则注重接口依赖的隔离
  2. 单一职责原则是约束类,它针对的是程序中的实现和细节,接口隔离原则主要约束接口,这对抽象和程序整体框架的设计。

接口隔离原则的优点

1.降低接口粒度,提高接口灵活性,可维护性
2.提高系统内聚性,减少对外互动,降低系统的耦合性
3.使类对外的暴露部分显得有层次,接口间的继承也可以使细粒度的接口之间有辨识度
4.减少冗余代码,没有不必要的实现方法

接口合理原则实现方法

1.接口尽量有限度的小且只服务一个子模块或业务逻辑
2.为依赖接口类定制服务,只提供调用者需要的方法,屏蔽不需要的方法
3.深度了解业务,尽可能按需分配,高内聚,减少不必要的对外暴露,用最少的代码完成业务

【例】 学生成绩管理程序
分析:学生成绩管理程序一般包含插入成绩、删除成绩、修改成绩、计算总分、平均分、打印、查询等功能。将他们分别放到不同模块中,输入模块、统计模块、打印模块、如图:


学生成绩管理程序的类图.png
  package principle;
public class ISPtest {
    public static void main(String[] args) {
        InputModule input = StuScoreList.getInputModule();
        CountModule count = StuScoreList.getCountModule();
        PrintModule print = StuScoreList.getPrintModule();
        input.insert();
        count.countTotalScore();
        print.printStuInfo();
        //print.delete();
    }
}
//输入模块接口
interface InputModule {
    void insert();
    void delete();
    void modify();
}
//统计模块接口
interface CountModule {
    void countTotalScore();
    void countAverage();
}
//打印模块接口
interface PrintModule {
    void printStuInfo();
    void queryStuInfo();
}
//实现类
class StuScoreList implements InputModule, CountModule, PrintModule {
    private StuScoreList() {
    }
    public static InputModule getInputModule() {
        return (InputModule) new StuScoreList();
    }
    public static CountModule getCountModule() {
        return (CountModule) new StuScoreList();
    }
    public static PrintModule getPrintModule() {
        return (PrintModule) new StuScoreList();
    }
    public void insert() {
        System.out.println("输入模块的insert()方法被调用!");
    }
    public void delete() {
        System.out.println("输入模块的delete()方法被调用!");
    }
    public void modify() {
        System.out.println("输入模块的modify()方法被调用!");
    }
    public void countTotalScore() {
        System.out.println("统计模块的countTotalScore()方法被调用!");
    }
    public void countAverage() {
        System.out.println("统计模块的countAverage()方法被调用!");
    }
    public void printStuInfo() {
        System.out.println("打印模块的printStuInfo()方法被调用!");
    }
    public void queryStuInfo() {
        System.out.println("打印模块的queryStuInfo()方法被调用!");
    }
}

打印输出

输入模块的insert()方法被调用!
统计模块的countTotalScore()方法被调用!
打印模块的printStuInfo()方法被调用!

总结:接口隔离原则中心思想类对外暴露方法要高内聚、低耦合,在定义框架或实现业务时,要充分了解业务,对业务进行合理的接口逻辑分配。

下一篇 上一篇

原文

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容