真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java設(shè)計模式七大設(shè)計原則中的單一職責(zé)原則和接口隔離原則介紹

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

成都創(chuàng)新互聯(lián)服務(wù)項目包括康巴什網(wǎng)站建設(shè)、康巴什網(wǎng)站制作、康巴什網(wǎng)頁制作以及康巴什網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,康巴什網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到康巴什省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

概述

簡單介紹一下七大設(shè)計原則:

  1. 開閉原則:是所有面向?qū)ο笤O(shè)計的核心,對擴展開放,對修改關(guān)閉

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

  3. 單一職責(zé)原則:一個接口只負責(zé)一件事情,只能有一個原因?qū)е骂愖兓?/p>

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

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

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

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


單一職責(zé)原則

定義

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

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

示例

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

新建用戶信息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設(shè)計模式七大設(shè)計原則中的單一職責(zé)原則和接口隔離原則介紹

如果像這樣子來設(shè)計,即使是一個初級程序員也可以看出這個解耦設(shè)計得有問題,用戶的屬性和用戶的行為沒有分離開。應(yīng)該把用戶的信息抽離成為一個BO,把行為抽離成為一個Biz(業(yè)務(wù)邏輯)。然后我們修改這個接口。 創(chuàng)建 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();
}

創(chuàng)建 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);
}

職責(zé)劃分后的類圖:

java設(shè)計模式七大設(shè)計原則中的單一職責(zé)原則和接口隔離原則介紹

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

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


接口隔離原則

定義

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

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

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

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

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

示例

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

IAnimal 接口:

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

Bird 類實現(xiàn):

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

    public void fly() {
    }

    public void swim() {
    }
}

Dog 類實現(xiàn):

/**
 * @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()方法顯然不可能的。這時候,我們針對不同動物行為來設(shè)計不同的接口,分別設(shè)計 IEatAnimal,IFlyAnimalISwimAnimal 接口,來看代碼:

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 只實現(xiàn) IEatAnimalISwimAnimal 接口:

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

    public void eat() {

    }

    public void swim() {

    }
}

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

java設(shè)計模式七大設(shè)計原則中的單一職責(zé)原則和接口隔離原則介紹 java設(shè)計模式七大設(shè)計原則中的單一職責(zé)原則和接口隔離原則介紹

到此,相信大家對“java設(shè)計模式七大設(shè)計原則中的單一職責(zé)原則和接口隔離原則介紹”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站欄目:java設(shè)計模式七大設(shè)計原則中的單一職責(zé)原則和接口隔離原則介紹
鏈接URL:http://weahome.cn/article/poicod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部