您好,登錄后才能下訂單哦!
這篇“Java接口隔離原則實(shí)例分析”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java接口隔離原則實(shí)例分析”文章吧。
接口隔離原則(Interface Segregation Principle),又稱為ISP原則,官方定義為
1.客戶端不應(yīng)該依賴它不需要的接口
2.類間的依賴關(guān)系應(yīng)該建立在最小的接口上
簡單點(diǎn)來講就是在一個類中不要定義過多的方法,接口應(yīng)該盡量簡單細(xì)化
假設(shè)有這樣一個案例場景,現(xiàn)在有一個接口Repair,給定他有三個能力,可以修汽車,修火車,修飛機(jī), 兩個實(shí)現(xiàn)類張師傅,李師傅分別具有這些能力,有一個4S店類,假設(shè)是需要張師傅來修汽車和修飛機(jī),而另一個4s店類需要李師傅來修汽車和修火車
定義維修接口類Repair.java
/** * 維修類 * @author:liyajie * @createTime:2022/1/29 17:00 * @version:1.0 */ public interface Repair { /** * 維修汽車 * @author: liyajie * @date: 2022/1/29 17:03 * @param * @return void * @exception: * @update: * @updatePerson: **/ void car(); /** * 維修火車 * @author: liyajie * @date: 2022/1/29 17:03 * @param * @return void * @exception: * @update: * @updatePerson: **/ void train(); /** * 維修飛機(jī) * @author: liyajie * @date: 2022/1/29 17:03 * @param * @return void * @exception: * @update: * @updatePerson: **/ void air(); }
維修李師傅類RepairLi.java
/** * 維修類 * @author:liyajie * @createTime:2022/1/29 17:00 * @version:1.0 */ public class RepairLi implements Repair{ @Override public void car() { System.out.println("李師傅修汽車"); } @Override public void train() { System.out.println("李師傅修火車"); } @Override public void air() { System.out.println("李師傅修飛機(jī)"); } }
維修王師傅類RepairWang.java
/** * 維修類 * @author:liyajie * @createTime:2022/1/29 17:00 * @version:1.0 */ public class RepairWang implements Repair{ @Override public void car() { System.out.println("王師傅修汽車"); } @Override public void train() { System.out.println("王師傅修火車"); } @Override public void air() { System.out.println("王師傅修飛機(jī)"); } }
4s店1
/** * 4s店1 * @author:liyajie * @createTime:2022/1/29 17:07 * @version:1.0 */ public class S1Shop { /** * 修汽車 * @author: liyajie * @date: 2022/1/29 17:10 * @param repair * @return void * @exception: * @update: * @updatePerson: **/ public void car(Repair repair){ repair.car(); } /** * 修火車 * @author: liyajie * @date: 2022/1/29 17:10 * @param repair * @return void * @exception: * @update: * @updatePerson: **/ public void train(Repair repair){ repair.train(); } }
4s店2
/** * 4s店2 * @author:liyajie * @createTime:2022/1/29 17:07 * @version:1.0 */ public class S2Shop { /** * 修汽車 * @author: liyajie * @date: 2022/1/29 17:10 * @param repair * @return void * @exception: * @update: * @updatePerson: **/ public void car(Repair repair){ repair.car(); } /** * 修飛機(jī) * @author: liyajie * @date: 2022/1/29 17:10 * @param repair * @return void * @exception: * @update: * @updatePerson: **/ public void air(Repair repair){ repair.air(); } }
測試類1
/** * 測試類1 * @author:liyajie * @createTime:2022/1/29 16:46 * @version:1.0 */ public class Test1 { public static void main(String[] args) { // 4s店1 new S1Shop().car(new RepairLi()); new S1Shop().train(new RepairLi()); // 4s店2 new S2Shop().car(new RepairWang()); new S2Shop().air(new RepairWang()); } }
定義維修汽車接口
/** * 維修類 * @author:liyajie * @createTime:2022/1/29 17:00 * @version:1.0 */ public interface RepairCar { /** * 維修汽車 * @author: liyajie * @date: 2022/1/29 17:03 * @param * @return void * @exception: * @update: * @updatePerson: **/ void car(); }
定義維修火車類
/** * 維修類 * @author:liyajie * @createTime:2022/1/29 17:00 * @version:1.0 */ public interface RepairTrain { /** * 維修火車 * @author: liyajie * @date: 2022/1/29 17:03 * @param * @return void * @exception: * @update: * @updatePerson: **/ void train(); }
定義維修飛機(jī)類
/** * 維修類 * @author:liyajie * @createTime:2022/1/29 17:00 * @version:1.0 */ public interface RepairAir { /** * 維修飛機(jī) * @author: liyajie * @date: 2022/1/29 17:03 * @param * @return void * @exception: * @update: * @updatePerson: **/ void air(); }
4s店1
/** * 4s店1 * @author:liyajie * @createTime:2022/1/29 17:07 * @version:1.0 */ public class S1ShopNew { /** * 修汽車 * @author: liyajie * @date: 2022/1/29 17:10 * @param repairCar * @return void * @exception: * @update: * @updatePerson: **/ public void car(RepairCar repairCar){ repairCar.car(); } /** * 修火車 * @author: liyajie * @date: 2022/1/29 17:10 * @param repairTrain * @return void * @exception: * @update: * @updatePerson: **/ public void train(RepairTrain repairTrain){ repairTrain.train(); } }
4s店2
/** * 4s店2 * @author:liyajie * @createTime:2022/1/29 17:07 * @version:1.0 */ public class S2ShopNew { /** * 修汽車 * @author: liyajie * @date: 2022/1/29 17:10 * @param repairCar * @return void * @exception: * @update: * @updatePerson: **/ public void car(RepairCar repairCar){ repairCar.car(); } /** * 修飛機(jī) * @author: liyajie * @date: 2022/1/29 17:10 * @param repairAir * @return void * @exception: * @update: * @updatePerson: **/ public void air(RepairAir repairAir){ repairAir.air(); } }
測試類
/** * 測試類1 * @author:liyajie * @createTime:2022/1/29 16:46 * @version:1.0 */ public class Test2 { public static void main(String[] args) { // 4s店1 new S1ShopNew().car(new RepairLiNew()); new S1ShopNew().train(new RepairLiNew()); // 4s店2 new S2ShopNew().car(new RepairWangNew()); new S2ShopNew().air(new RepairWangNew()); } }
方案一,違反了接口隔離原則,因?yàn)槔顜煾岛屯鯉煾刀紝?shí)現(xiàn)了維修接口的三個方法:修汽車,修火車,修飛機(jī)。但需求中并不需要這么多,只需要李師傅修汽車和火車,王師傅修汽車和飛機(jī),依賴關(guān)系不是建立在最小接口上
方案二,遵守了接口隔離原則,對李師傅和王師傅類都進(jìn)行了接口隔離,實(shí)現(xiàn)了各自的兩個方法,避免了耦合
以上就是關(guān)于“Java接口隔離原則實(shí)例分析”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。