<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用者端不應該依賴它不需要的介面,即一個類對另一個類的依賴應該建立在最小的介面範圍上。
上面這張圖呢,就違反了介面隔離原則。它對應的程式碼如下:
package com.szh.principle.segregation; /** * */ interface Interface1 { void operation1(); void operation2(); void operation3(); void operation4(); void operation5(); } class B implements Interface1 { public void operation1() { System.out.println("B 實現了 operation1"); } public void operation2() { System.out.println("B 實現了 operation2"); } public void operation3() { System.out.println("B 實現了 operation3"); } public void operation4() { System.out.println("B 實現了 operation4"); } public void operation5() { System.out.println("B 實現了 operation5"); } } class D implements Interface1 { public void operation1() { System.out.println("D 實現了 operation1"); } public void operation2() { System.out.println("D 實現了 operation2"); } public void operation3() { System.out.println("D 實現了 operation3"); } public void operation4() { System.out.println("D 實現了 operation4"); } public void operation5() { System.out.println("D 實現了 operation5"); } } class A { //A 類通過介面Interface1 依賴(使用) B類,但是隻會用到1,2,3方法 public void depend1(Interface1 i) { i.operation1(); } public void depend2(Interface1 i) { i.operation2(); } public void depend3(Interface1 i) { i.operation3(); } } class C { //C 類通過介面Interface1 依賴(使用) D類,但是隻會用到1,4,5方法 public void depend1(Interface1 i) { i.operation1(); } public void depend4(Interface1 i) { i.operation4(); } public void depend5(Interface1 i) { i.operation5(); } } public class Segregation1 { public static void main(String[] args) { A a = new A(); a.depend1(new B()); // A類通過介面去依賴B類 a.depend2(new B()); a.depend3(new B()); C c = new C(); c.depend1(new D()); // C類通過介面去依賴(使用)D類 c.depend4(new D()); c.depend5(new D()); } }
程式碼雖然很長,但是不難理解。A類依賴了B類,但是隻會用到頂級介面中的1、2、3這三個方法;而C類依賴了D類,但是隻會用到頂級介面中的1、4、5這三個方法,也就是說在A和B這兩個類的層面上而言,和頂級介面中的4、5兩個方法是沒什麼關聯的,那麼B類在實現頂級介面的時候就沒必要重寫4、5這兩個方法了。但是這裡有一個問題就是頂級介面中包括了1到5這五個方法,你如果實現這個介面就必須重寫這五個方法,那麼我們就可以考慮將頂級介面拆分成多個介面,需要用到哪個就實現哪個,這也就是所謂的介面隔離了。
經過上面的一番敘述,我們可以將程式碼改寫成下面的形式。
即將頂級介面拆分成3個小介面,B、D兩個類根據實際情況該實現哪個介面就實現哪個介面(因為這五個方法已經被分開了)。
package com.szh.principle.segregation.improve; /** * */ interface Interface1 { void operation1(); } interface Interface2 { void operation2(); void operation3(); } interface Interface3 { void operation4(); void operation5(); } class B implements Interface1, Interface2 { public void operation1() { System.out.println("B 實現了 operation1"); } public void operation2() { System.out.println("B 實現了 operation2"); } public void operation3() { System.out.println("B 實現了 operation3"); } } class D implements Interface1, Interface3 { public void operation1() { System.out.println("D 實現了 operation1"); } public void operation4() { System.out.println("D 實現了 operation4"); } public void operation5() { System.out.println("D 實現了 operation5"); } } class A { // A 類通過介面Interface1,Interface2 依賴(使用) B類,但是隻會用到1,2,3方法 public void depend1(Interface1 i) { i.operation1(); } public void depend2(Interface2 i) { i.operation2(); } public void depend3(Interface2 i) { i.operation3(); } } class C { // C 類通過介面Interface1,Interface3 依賴(使用) D類,但是隻會用到1,4,5方法 public void depend1(Interface1 i) { i.operation1(); } public void depend4(Interface3 i) { i.operation4(); } public void depend5(Interface3 i) { i.operation5(); } } public class Segregation2 { public static void main(String[] args) { A a = new A(); a.depend1(new B()); // A類通過介面去依賴B類 a.depend2(new B()); a.depend3(new B()); C c = new C(); c.depend1(new D()); // C類通過介面去依賴(使用)D類 c.depend4(new D()); c.depend5(new D()); } }
類A通過介面Interface1依賴類B,類C通過介面Interfacel依賴類D,如果介面Interface1對於類A和類C來說不是最小介面,那麼類B和類D必須去實現他們不需要的方法。
將介面Interface1拆分為獨立的幾個介面,類A和類C分別與他們需要的介面建立依賴關係。也就是採用介面隔離原則。
以上就是範例分析java設計模式七大原則之介面隔離原則的詳細內容,更多關於java設計模式介面隔離原則的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45