簡略懂得遵守接口隔離准繩的Java設計形式編程。本站提示廣大學習愛好者:(簡略懂得遵守接口隔離准繩的Java設計形式編程)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略懂得遵守接口隔離准繩的Java設計形式編程正文
界說:客戶端不該該依附它不須要的接口;一個類對另外一個類的依附應當樹立在最小的接口上。
成績由來:類A經由過程接口I依附類B,類C經由過程接口I依附類D,假如接口I關於類A和類B來講不是最小接口,則類B和類D必需去完成他們不須要的辦法。
處理計劃:將癡肥的接口I拆分為自力的幾個接口,類A和類C分離與他們須要的接口樹立依附關系。也就是采取接口隔離准繩。
舉例來講明接口隔離准繩:
這個圖的意思是:類A依附接口I中的辦法1、辦法2、辦法3,類B是對類A依附的完成。類C依附接口I中的辦法1、辦法4、辦法5,類D是對類C依附的完成。關於類B和類D來講,固然他們都存在著用不到的辦法(也就是圖中白色字體標志的辦法),但因為完成了接口I,所以也必需要完成這些用不到的辦法。
我們起首先看一個違背接口隔離的例子:
public interface IWorker { public void work(); public void eat(); } public class Worker implements IWorker{ @Override public void work() { // TODO 工人任務 } @Override public void eat() { // TODO 工人吃飯 } } public class Robot implements IWorker { @Override public void work() { // TODO 機械人任務 } @Override public void eat() { // TODO 機械人吃飯? } }
因為機械人是不須要吃飯的,所以IWorker被以為是一個癡肥的接口,固然你也能夠在Robot類中的eat辦法做空完成,然則如許能夠會發生弗成估計的BUG,好比eat辦法須要消費盒飯數目的話,就會湧現纰謬應的景象。
上面是修正後的完成:
public interface IWorker { public void work(); } public interface IDiet { public void eat(); } public class Worker implements IWorker, IDiet{ @Override public void work() { // TODO 工人任務 } @Override public void eat() { // TODO 工人吃飯 } } public class Robot implements IWorker { @Override public void work() { // TODO 機械人任務 } }
總結:
1. 接口要盡可能小,並高內聚,不外要恰當,太細化欠好保護。
2. 假如曾經設計成了癡肥的接口,可使用適配器形式隔離它。