日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

接口隔离原则——面向对象设计原则

發(fā)布時(shí)間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接口隔离原则——面向对象设计原则 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

接口隔離原則的定義

接口隔離原則(Interface Segregation Principle,ISP)要求程序員盡量將臃腫龐大的接口拆分成更小的和更具體的接口,讓接口中只包含客戶感興趣的方法。

2002 年羅伯特·C.馬丁給“接口隔離原則”的定義是:客戶端不應(yīng)該被迫依賴于它不使用的方法(Clients should not be forced to depend on methods they do not use)。該原則還有另外一個(gè)定義:一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上(The dependency of one class to another one should depend on the smallest possible interface)。

以上兩個(gè)定義的含義是:要為各個(gè)類建立它們需要的專用接口,而不要試圖去建立一個(gè)很龐大的接口供所有依賴它的類去調(diào)用。

接口隔離原則和單一職責(zé)都是為了提高類的內(nèi)聚性、降低它們之間的耦合性,體現(xiàn)了封裝的思想,但兩者是不同的:

  • 單一職責(zé)原則注重的是職責(zé),而接口隔離原則注重的是對(duì)接口依賴的隔離。
  • 單一職責(zé)原則主要是約束類,它針對(duì)的是程序中的實(shí)現(xiàn)和細(xì)節(jié);接口隔離原則主要約束接口,主要針對(duì)抽象和程序整體框架的構(gòu)建。

接口隔離原則的優(yōu)點(diǎn)

接口隔離原則是為了約束接口、降低類對(duì)接口的依賴性,遵循接口隔離原則有以下 5 個(gè)優(yōu)點(diǎn)。

  • 將臃腫龐大的接口分解為多個(gè)粒度小的接口,可以預(yù)防外來(lái)變更的擴(kuò)散,提高系統(tǒng)的靈活性和可維護(hù)性。
  • 接口隔離提高了系統(tǒng)的內(nèi)聚性,減少了對(duì)外交互,降低了系統(tǒng)的耦合性。
  • 如果接口的粒度大小定義合理,能夠保證系統(tǒng)的穩(wěn)定性;但是,如果定義過(guò)小,則會(huì)造成接口數(shù)量過(guò)多,使設(shè)計(jì)復(fù)雜化;如果定義太大,靈活性降低,無(wú)法提供定制服務(wù),給整體項(xiàng)目帶來(lái)無(wú)法預(yù)料的風(fēng)險(xiǎn)。
  • 使用多個(gè)專門(mén)的接口還能夠體現(xiàn)對(duì)象的層次,因?yàn)榭梢酝ㄟ^(guò)接口的繼承,實(shí)現(xiàn)對(duì)總接口的定義。
  • 能減少項(xiàng)目工程中的代碼冗余。過(guò)大的大接口里面通常放置許多不用的方法,當(dāng)實(shí)現(xiàn)這個(gè)接口的時(shí)候,被迫設(shè)計(jì)冗余的代碼。
  • 接口隔離原則的實(shí)現(xiàn)方法

    在具體應(yīng)用接口隔離原則時(shí),應(yīng)該根據(jù)以下幾個(gè)規(guī)則來(lái)衡量。

    • 接口盡量小,但是要有限度。一個(gè)接口只服務(wù)于一個(gè)子模塊或業(yè)務(wù)邏輯。
    • 為依賴接口的類定制服務(wù)。只提供調(diào)用者需要的方法,屏蔽不需要的方法。
    • 了解環(huán)境,拒絕盲從。每個(gè)項(xiàng)目或產(chǎn)品都有選定的環(huán)境因素,環(huán)境不同,接口拆分的標(biāo)準(zhǔn)就不同深入了解業(yè)務(wù)邏輯。
    • 提高內(nèi)聚,減少對(duì)外交互。使接口用最少的方法去完成最多的事情。


    下面以學(xué)生成績(jī)管理程序?yàn)槔榻B接口隔離原則的應(yīng)用。

    【例1】學(xué)生成績(jī)管理程序。

    分析:學(xué)生成績(jī)管理程序一般包含插入成績(jī)、刪除成績(jī)、修改成績(jī)、計(jì)算總分、計(jì)算均分、打印成績(jī)信息、査詢成績(jī)信息等功能,如果將這些功能全部放到一個(gè)接口中顯然不太合理,正確的做法是將它們分別放在輸入模塊、統(tǒng)計(jì)模塊和打印模塊等 3 個(gè)模塊中,其類圖如圖 1 所示。


    圖1 學(xué)生成績(jī)管理程序的類圖

    程序代碼如下:

  • 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();
  • }
  • //統(tǒng)計(jì)模塊接口
  • interface CountModule
  • {
  • ??? void countTotalScore();
  • ??? void countAverage();
  • }
  • //打印模塊接口
  • interface PrintModule
  • {
  • ??? void printStuInfo();
  • ??? void queryStuInfo();
  • }
  • //實(shí)現(xiàn)類
  • 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()方法被調(diào)用!");
  • ??? }
  • ??? public void delete()
  • ??? {
  • ??????? System.out.println("輸入模塊的delete()方法被調(diào)用!");
  • ??? }
  • ??? public void modify()
  • ??? {
  • ??????? System.out.println("輸入模塊的modify()方法被調(diào)用!");
  • ??? }
  • ??? public void countTotalScore()
  • ??? {
  • ??????? System.out.println("統(tǒng)計(jì)模塊的countTotalScore()方法被調(diào)用!");
  • ??? }
  • ??? public void countAverage()
  • ??? {
  • ??????? System.out.println("統(tǒng)計(jì)模塊的countAverage()方法被調(diào)用!");
  • ??? }
  • ??? public void printStuInfo()
  • ??? {
  • ??????? System.out.println("打印模塊的printStuInfo()方法被調(diào)用!");
  • ??? }
  • ??? public void queryStuInfo()
  • ??? {
  • ??????? System.out.println("打印模塊的queryStuInfo()方法被調(diào)用!");
  • ??? }
  • }

  • 程序的運(yùn)行結(jié)果如下:

    輸入模塊的insert()方法被調(diào)用! 統(tǒng)計(jì)模塊的countTotalScore()方法被調(diào)用! 打印模塊的printStuInfo()方法被調(diào)用!

    轉(zhuǎn)載于:https://www.cnblogs.com/sallyiszxm/p/10979640.html

    總結(jié)

    以上是生活随笔為你收集整理的接口隔离原则——面向对象设计原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。