設計模式之接口隔離原則

接口隔離原則(Interface Segregation Principle,ISP)是指用多個專門的接口,而不使用單一的總接口,客戶端不應該依賴它不需要的接口。
根據接口隔離原則,我們設計接口時應該注意一下幾點:
1.一個類對另一個類的依賴應該建立在最小的接口上。
2.建立單一的接口,不要建立龐大臃腫的接口。
3.儘量細化接口,接口中的方法儘量少。(但不是越少越好,要適度)
接口隔離原則符合我們常說的高內聚,低耦合的設計思想。接口的設計是要依賴業務來實現的,因此在設計接口時,要多思考,考慮業務邏輯,業務模型,還要對以後有可能發生變化的地方進行考慮和預判。所以,對於抽象,業務模型的理解是非常重要。
來看以下代碼,通過對一個動物行爲進行抽象描述:
1.IAnimal 接口代碼:
public interface IAnimal{
    void eat();    
    void fly();
    void swim();
}

Bird 類代碼:
public class Bird implements IAnimal{
    @override
    public void eat(){}

    @override
    public void fly(){}

    @override
    public void swim(){}
}


Dog 類代碼:
public class Dog implements IAnimal{
    @override
    public void eat(){}

    @override
    public void fly(){}

    @override
    public void swim(){}
}

2.從以上代碼可以看出Bird 的 swim() 方法可能只能空着,Dog 中的 fly()方法顯然是不可能的。此時,我們可以根據不同的動物設計不同的接口,分別設計IEatAnimal、IFlyAnimal和ISwimAnimal接口:
IEatAnimal 接口:
public interface IEatAnimal{
    void eat();    
}

IFlyAnimal 接口:
public interface IFlyAnimal{
    void fly();
}

ISwimAnimal 接口:
public interface ISwimAnimal{
    void swim();
}

Dog 只實現IEatAnimal、ISwimAnimal這兩個接口,這樣就實現了接口隔離原則
public class Dog implements IEatAnimal,ISwimAnimal{
    @override
    public void eat(){}
    
    @override
    public void swim(){}
}
   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章