C# 實例解釋面向對象編程中的接口隔離原則


在面向對象編程中,SOLID 是五個設計原則的首字母縮寫,旨在使軟件設計更易於理解、靈活和可維護。這些原則是由美國軟件工程師和講師羅伯特·C·馬丁(Robert Cecil Martin)提出的許多原則的子集,在他2000年的論文《設計原則與設計模式》中首次提出。

SOLID 原則包含:

本文我們來介紹接口隔離原則

接口隔離原則

接口隔離原則(Interface segregation principle,ISP)認為“多個特定用戶接口要好於一個寬泛用途的接口”。

它指明用戶(client)不應被迫使用對其而言無用的方法或功能。接口隔離原則將龐大臃腫的接口拆分成為更小、更具體的接口,讓用戶僅需知道他們感興趣的方法。這種縮小了的接口也被稱為角色接口(role interfaces)。接口隔離原則的目的是將系統解耦,從而使其易於重構、更改和重新部署。

C# 示例

糟糕的示范

創建一個包含公司部門的 ICompanyDepartment 接口。

interface ICompanyDepartment
{
    public void AdminDepartment();
    public void FinanaceDepartment();
    public void HRDepartment();
    public void ITDepartment();
}

讓我們首先為 A 公司實現 ICompanyDepartment 接口,文件名為 ACompany.cs

class ACompany : ICompanyDepartment
{
    public void AdminDepartment()
    {
        //DO SOMETHING
    }
    public void FinanaceDepartment()
    {
        //DO SOMETHING
    }
    public void HRDepartment()
    {
        //DO SOMETHING
    }
    public void ITDepartment()
    {
        //DO SOMETHING
    }
}

假如現在有一個從事制造業的 B 公司,他們沒有 IT 部門,而多了一個生產部門,那么上面的實現就有問題了。

如果在接口 ICompanyDepartment 上添加一個 ManufacturingDepartment 生產部門,那我們就不得不在 ACompanyBCompany 兩個類上都實現該簽名。

也就是說,為了使用 ICompanyDepartment 接口,我們不得不在 ACompany 類上實現不必要的 ManufacturingDepartment 方法,在 BCompany 類上實現不必要的 ITDepartment 方法。這明顯違反了接口隔離原則

為了使其符合接口隔離原則,我們需要進行一些修改。

正確的示范

根據接口隔離原則,我們要將 ITDepartmentManufacturingDepartment 方法從接口 ICompanyDepartment 拆分出來,形成兩個獨立的角色接口

  1. IACompanyUniqueFeature
  2. IBCompanyUniqueFeature

這樣我們就擁有了三個接口:

interface ICompanyDepartment
{
    public void AdminDepartment();
    public void FinanaceDepartment();
    public void HRDepartment();
}
interface IACompanyUniqueFeature
{
    public void ITDepartment();
}
interface IBCompanyUniqueFeature
{
    public void ManufacturingDepartment();
}

ACompanyBCompany 的實現如下:

class ACompany : ICompanyDepartment, IACompanyUniqueFeature
{
    public void AdminDepartment()
    {
        //DO SOMETHING
    }
    public void FinanaceDepartment()
    {
        //DO SOMETHING
    }
    public void HRDepartment()
    {
        //DO SOMETHING
    }
    public void ITDepartment()
    {
        //DO SOMETHING
    }
}

class BCompany : ICompanyDepartment, IBCompanyUniqueFeature
{
    public void AdminDepartment()
    {
        //DO SOMETHING
    }
    public void FinanaceDepartment()
    {
        //DO SOMETHING
    }
    public void HRDepartment()
    {
        //DO SOMETHING
    }
    public void ManufacturingDepartment()
    {
        //DO SOMETHING
    }
}

這樣,以上的接口設計便遵循了接口隔離原則

總結

本文我介紹了 SOLID 原則中的接口隔離原則(Interface segregation principle),並通過 C# 代碼示例簡明地詮釋了它的含意和實現,希望對您有所幫助。

作者 : 技術譯民
出品 : 技術譯站


參考文檔:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM