中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹

發布時間:2021-09-04 14:30:39 來源:億速云 閱讀:138 作者:chen 欄目:大數據

本篇內容主要講解“java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹”吧!

概述

簡單介紹一下七大設計原則:

  1. 開閉原則:是所有面向對象設計的核心,對擴展開放,對修改關閉

  2. 依賴倒置原則:針對接口編程,依賴于抽象而不依賴于具體

  3. 單一職責原則:一個接口只負責一件事情,只能有一個原因導致類變化

  4. 接口隔離原則:使用多個專門的接口,而不是使用一個總接口

  5. 迪米特法則(最少知道原則):只和朋友交流(成員變量、方法輸入輸出參數),不和陌生人說話,控制好訪問修飾符

  6. 里氏替換原則:子類可以擴展父類的功能,但不能改變父類原有的功能

  7. 合成復用原則:盡量使用對象組合(has-a)/聚合(contanis-a),而不是繼承關系達到軟件復用的目的


單一職責原則

定義

單一職責(Simple Responsibility Pinciple,SRP)是指不要存在多于一個導致類變更 的原因。

假設我們有一個 Class 負責兩個職責,一旦發生需求變更,修改其中一個職責的邏輯代碼,有可能會導致另一個職責的功能發生故障。這樣一來,這個 Class 存在兩個導 致類變更的原因。如何解決這個問題呢?我們就要給兩個職責分別用兩個 Class 來實現, 進行解耦。后期需求變更維護互不影響。這樣的設計,可以降低類的復雜度,提高類的 可讀性,提高系統的可維護性,降低變更引起的風險。總體來說就是一個 Class/Interface/Method 只負責一項職責。

示例

接下來我們參考《設計模式之禪》一書中所提到關于用戶信息管理的示例來舉例:

新建用戶信息IUserInfo類:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:07
 */
public interface IUserInfo {
    void setUserID(String userID);
    String getUserID();
    void setPassword(String password);
    String getPassword();
    void setUserName(String userName);
    String getUserName();
    boolean changePassword(String oldPassword);
    boolean deleteUser();
    void mapUser();
    boolean addOrg(int orgID);
    boolean addRole(int roleID);
}

用戶信息維護類圖:

java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹

如果像這樣子來設計,即使是一個初級程序員也可以看出這個解耦設計得有問題,用戶的屬性和用戶的行為沒有分離開。應該把用戶的信息抽離成為一個BO,把行為抽離成為一個Biz(業務邏輯)。然后我們修改這個接口。 創建 IUserBo 類:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:18
 */
public interface IUserBO {
    void setUserID(String userID);
    String getUserID();
    void setPassword(String password);
    String getPassword();
    void setUserName(String userName);
    String getUserName();
}

創建 IUserBiz 類:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:18
 */
public interface IUserBiz {
    boolean changePassword(String oldPassword);
    boolean deleteUser();
    void mapUser();
    boolean addOrg(int orgID);
    boolean addRole(int roleID);
}

職責劃分后的類圖:

java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹

我們將IUserInfo拆分為了IUserBoIUserBiz。我們就實現了兩個類的單一職責,也就是讓引起他們變化原因只有一種,并且讓相關性強的內容聚合在一個類內部。

但是,我們在實際開發中會項目依賴,組合,聚合這些關系,還有還有項目的規模,周期,技術人員的水平,對進度的把控,很多類都不符合單一職責。但是,我們在編寫代碼的過程,盡可能地讓接口和方法保持 單一職責,對我們項目后期的維護是有很大幫助的。


接口隔離原則

定義

接口隔離原則(Interface Segregation Principle, ISP)是指用多個專門的接口,而不使 用單一的總接口,客戶端不應該依賴它不需要的接口。這個原則指導我們在設計接口時 應當注意一下幾點:

  1. 一個類對一類的依賴應該建立在最小的接口之上。

  2. 建立單一接口,不要建立龐大臃腫的接口。

  3. 盡量細化接口,接口中的方法盡量少(不是越少越好,一定要適度)

接口隔離原則符合我們常說的高內聚低耦合的設計思想,從而使得類具有很好的可讀性、 可擴展性和可維護性。我們在設計接口的時候,要多花時間去思考,要考慮業務模型,包括以后有可能發生變更的地方還要做一些預判。所以,對于抽象,對業務模型的理解 是非常重要的。

示例

下面我們來看一段代碼,寫一個動物行為的抽象:

IAnimal 接口:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:56
 */
public interface IAnimal {
    void eat();
    void fly();
    void swim();
}

Bird 類實現:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:57
 */
public class Bird implements IAnimal {
    public void eat() {
    }

    public void fly() {
    }

    public void swim() {
    }
}

Dog 類實現:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:57
 */
public class Dog implements IAnimal {
    public void eat() {
    }

    public void fly() {
    }

    public void swim() {
    }
}

可以看出,Birdswim()方法可能只能空著,Dogfly()方法顯然不可能的。這時候,我們針對不同動物行為來設計不同的接口,分別設計 IEatAnimalIFlyAnimalISwimAnimal 接口,來看代碼:

IEatAnimal 接口:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:59
 */
public interface IEatAnimal {
    void eat();
}

IFlyAnimal 接口:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午5:01
 */
public interface IFlyAnimal {
    void fly();
}

ISwimAnimal 接口:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午5:02
 */
public interface ISwimAnimal {
    void swim();
}

Dog 只實現 IEatAnimalISwimAnimal 接口:

/**
 * @author eamon.zhang
 * @date 2019-09-25 下午4:57
 */
public class Dog implements IEatAnimal,ISwimAnimal {

    public void eat() {

    }

    public void swim() {

    }
}

來看下兩種類圖的對比,還是非常清晰明了的:

java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹 java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹

到此,相信大家對“java設計模式七大設計原則中的單一職責原則和接口隔離原則介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兰市| 句容市| 华池县| 汝南县| 兴安县| 齐河县| 泰宁县| 健康| 苍梧县| 泰和县| 陵水| 陆河县| 海淀区| 南澳县| 定襄县| 合肥市| 合山市| 雅安市| 乌兰浩特市| 青河县| 晋城| 呼玛县| 岑溪市| 洛川县| 黔西| 宣化县| 城市| 保山市| 绵阳市| 惠东县| 长沙市| 翼城县| 马关县| 丰顺县| 卢龙县| 临泽县| 洞口县| 正镶白旗| 武强县| 万盛区| 交城县|