深入浅出设计模式原则之依赖倒置原则
生活随笔
收集整理的這篇文章主要介紹了
深入浅出设计模式原则之依赖倒置原则
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
下面以“顧客購物程序”為例來說明依賴倒置原則的應(yīng)用(案例源碼)。
#include <QCoreApplication> #include <iostream>//! shop class Shop{ public:virtual std::string Sell() = 0; };class ShaoguanShop:public Shop{ public:std::string Sell(){return "shaoguan shop";} };class WuyanShop:public Shop{ public:std::string Sell(){return "wuyan shop";} };//! 顧客 class Customer { public:void Shopping(Shop *shop){std::cout<<shop->Sell()<<std::endl;} };int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);class Customer wang;ShaoguanShop myShaoguanShop;WuyanShop myWuyanShop;wang.Shopping(&myShaoguanShop);wang.Shopping(&myWuyanShop);return a.exec(); }分析:本程序反映了 “顧客類”與“商店類”的關(guān)系。商店類中有 sell() 方法,顧客類通過該方法購物以下代碼定義了顧客類通過韶關(guān)網(wǎng)店 ShaoguanShop 購物:
class Customer { public:void Shopping(ShaoguanShop *shop){std::cout<<shop->Sell()<<std::endl;} };但是,這種設(shè)計(jì)存在缺點(diǎn),如果該顧客想從另外一家商店(如婺源網(wǎng)店 WuyuanShop)購物,就要將該顧客的代碼修改如下:
class Customer { public:void Shopping(WuyanShop*shop){std::cout<<shop->Sell()<<std::endl;} };顧客每更換一家商店,都要修改一次代碼,這明顯違背了開閉原則。存在以上缺點(diǎn)的原因是:顧客類設(shè)計(jì)時同具體的商店類綁定了,這違背了依賴倒置原則。解決方法是:定義“婺源網(wǎng)店”和“韶關(guān)網(wǎng)店”的共同接口 Shop,顧客類面向該接口編程,其代碼修改如下:
//! 顧客 class Customer { public:void Shopping(Shop *shop){std::cout<<shop->Sell()<<std::endl;} };?這樣,不管顧客類 Customer 訪問什么商店,或者增加新的商店,都不需要修改原有代碼了,其類圖如圖 1 所示。
?
?這個原則是開閉原則的基礎(chǔ),具體內(nèi)容:針對接口編程,依賴于抽象而不依賴于具體。
參考:
?
?
?
總結(jié)
以上是生活随笔為你收集整理的深入浅出设计模式原则之依赖倒置原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 血清肌酐降低的原因(血清肌酐偏低的原因)
- 下一篇: 深入浅出设计模式原则之接口隔离原则(IS