合成復用原則

一、原則概述

合成復用原則(Composition/Aggregation Reuse Principle)是指使用組合或聚合關係來代替繼承,達到復用的目的,它要求盡量使用合成/聚合關係,盡量不要使用繼承。該原則能夠避免繼承所帶來的一些問題,如繼承某個類的所有屬性和方法可能不符合實際需求,子類過多地依賴父類,導致系統的維護和擴展困難等。而使用合成/聚合關係則能夠避免這些問題的出現,使得系統更加的靈活。

二、優點

使用合成復用的優點可以從以下兩個方面進行分析:

1. 提高系統靈活性

使用合成/聚合關係能夠提高系統的靈活性,使得系統的結構更加穩定,更容易進行擴展和維護,也能夠使得系統更加的易於理解和可讀性更好。

2. 降低類之間的耦合度

使用繼承會導致子類和父類之間的耦合度很高,因為子類繼承了父類的屬性和方法,在使用時不能很好的進行定製化,只能進行較小的修改。而使用合成/聚合關係則能夠使得類之間的耦合度降低,使得類之間更加獨立,更容易維護。

三、代碼示例

下面是一個基於合成復用原則設計的代碼實例:

class Engine {
public:
    virtual void run() = 0;
};

class GasolineEngine : public Engine {
public:
    void run() override {
        // run by gasoline
    }
};

class ElectricEngine : public Engine {
public:
    void run() override {
        // run by electricity
    }
};

class Vehicle {
public:
    Vehicle(Engine *engine) : engine(engine) {}

    void run() {
        engine->run();
    }

private:
    Engine *engine;
};

class Car : public Vehicle {
public:
    Car(Engine *engine) : Vehicle(engine) {}
};

class Bus : public Vehicle {
public:
    Bus(Engine *engine) : Vehicle(engine) {}
};

上面的代碼中,Engine類是引擎類的抽象基類,定義了run方法,而GasolineEngine和ElectricEngine是引擎類的實現類,具體實現了run方法。Vehicle類為車輛類,引入了Engine指針,用於表示車輛所搭載的引擎。而Car和Bus是車輛類的具體實現,通過繼承Vehicle類來實現,同時指定所搭載的引擎。

四、使用注意點

使用合成復用原則需要注意以下幾點:

1.抽象基類需要合理設計

抽象基類是合成復用中的重要組成部分,需要設計合理的接口和抽象方法,保證具體實現類可以全部實現,並且不需要進行修改。在使用抽象基類時,需要特別注意接口和抽象方法的設計。

2.合理使用聚合和組合關係

在使用合成復用時,需要合理使用聚合和組合關係。聚合是指一個對象可以包含另一個對象,但並不擁有該對象,如上面的Vehicle類包含了Engine對象。組合是指一個對象包含另一個對象,並擁有該對象,如黑色棋子遊戲中的棋盤和棋子的關係。在使用時需要按照需求進行選擇,避免不必要的耦合。

3.考慮接口的重用性

在使用合成復用原則時,需要考慮接口的重用性。有時候可以抽象出復用的接口,使得不同的類型都能夠使用同一個接口,從而提高系統的靈活性和擴展性。

原創文章,作者:AWULZ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/369221.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AWULZ的頭像AWULZ
上一篇 2025-04-12 13:00
下一篇 2025-04-12 13:00

相關推薦

  • 用mdjs打造高效可復用的Web組件

    本文介紹了一個全能的編程開發工程師如何使用mdjs來打造高效可復用的Web組件。我們將會從多個方面對mdjs做詳細的闡述,讓您輕鬆學習並掌握mdjs的使用。 一、mdjs簡介 md…

    編程 2025-04-27
  • GDPR隱私保護七大原則

    自2018年5月25日起,歐洲聯盟(EU)在GPDR的指引下,強制所有企業和組織換取用戶的數據授權。在GDPR的制度下,用戶可以更好的掌握和保護自己的個人隱私,而且企業需要承擔更多…

    編程 2025-04-23
  • 依賴倒轉原則詳解

    一、什麼是依賴倒轉原則 依賴倒轉原則(Dependency Inversion Principle,DIP)是SOLID原則中的一條,它是指依賴關係中高層模塊不應該依賴於底層模塊,…

    編程 2025-04-12
  • Redis多路復用原理詳解

    一、什麼是多路復用 多路復用是指在單一的通信信道上,同時傳輸多個信號或數據流的技術。舉個例子,我們可以想像一條高速公路,車輛在不同的車道上行駛,但它們共用同一條路。 二、Redis…

    編程 2025-02-01
  • 選項式api和組合式api:提高代碼復用和模塊化的利器

    在現代應用程序中,代碼復用和模塊化是至關重要的概念。選項式API和組合式API是兩種實現代碼復用和模塊化的技術。這篇文章將從多個方面對這兩個API進行詳細的闡述。 一、選項式API…

    編程 2025-02-01
  • BGP選路原則詳解

    一、BGP選路原則概述 BGP(Border Gateway Protocol)是一種自治系統間的路由協議,主要應用於互聯網核心路由器之間的路由交換。BGP路由協議的主要作用在於為…

    編程 2025-01-24
  • 接口隔離原則詳解

    一、接口隔離的定義 接口隔離原則(Interface Segregation Principle,簡稱ISP)是指在進行軟件設計時,應該將不同的功能模塊拆分成不同的接口,使得每個接…

    編程 2025-01-24
  • 系統功能架構設計原則和最佳實踐

    一、設計原則 1、高內聚,低耦合 系統內部各個模塊之間聯繫要儘可能的緊密,同時又要儘可能的減少對外部接口的依賴。這樣可以使系統的模塊化更好,易於維護、擴展和重構。 /* 示例代碼 …

    編程 2025-01-09
  • C++函數封裝:提高代碼復用性和可讀性

    一、概述 函數封裝是C++中一種常用的編程技術和思想,它是指將一組相關的代碼和數據封裝在一個獨立的、可重複使用的模塊中,以實現代碼的復用和易讀性的提高。在C++中,封裝可以採用類和…

    編程 2025-01-07
  • 深入分析php設計模式,php設計模式六大原則

    本文目錄一覽: 1、什麼是PHP中的工廠設計模式 2、php中常見的幾種設計模式 3、php常用的MVC原理以及設計模式? 4、深入了解php框架mvc設計模式的原理 5、PHP設…

    編程 2025-01-04

發表回復

登錄後才能評論