设计模式的依赖倒转原则

传统的设计模式自顶向下逐级依赖 这样的话每一层的耦合度极高 修改任意的其中一个都会导致全面及的修改

#include <iostream>
using namespace std;
 
//依赖倒转原则
 
//上层模块
class BankWorker {
public:
    void saveService() {
        cout << "办理存款业务..." << endl;
    }
    void payService() {
        cout << "办理支付业务..." << endl;
    }
    void transferService() {
        cout << "办理转账业务" << endl;
    }
};
 
//中层模块
void doSaveBusiness(BankWorker* worker) {
    worker->saveService();
}
void doPayBusiness(BankWorker* worker) {
    worker->payService();
}
void doTransferBusiness(BankWorker* worker) {
    worker->transferService();
}
 
//底层模块
void test01() {
    BankWorker* worker = new BankWorker;
    doSaveBusiness(worker);//办理存款业务
    doPayBusiness(worker);//办理支付业务
    doTransferBusiness(worker);//办理转账业务
 
}
 
 
int main() {
    test01();
    return 0;
}
这里我们发现使用传统设计模式下 底层依赖于中层 中层依赖于上层 耦合性太强

这里我们可以改变一下 高层业务逻辑是依赖于抽象层 而具体的实现也是依赖于抽象层

#include <iostream>
using namespace std;
 
//依赖倒转原则
 
//银行工作人员 抽象层
class AbstractWorker {
public:
    virtual void doBusiness() = 0;
};
 
//专门负责办理存款业务的工作人员
class SaveBankWorker : public AbstractWorker {
public:
    virtual void doBusiness() {
        cout << "办理存款业务..." << endl;
    }
};
 
//专门办理支付业务的工作人员
class PayBankWorker : public AbstractWorker {
public:
    virtual void doBusiness() {
        cout << "办理支付业务..." << endl;
    }
};
 
//专门办理转账业务的工作人员
class TransferBankWorker : public AbstractWorker {
public:
    virtual void doBusiness() {
        cout << "办理转账业务..." << endl;
    }
};
 
//中层业务模块 依赖于抽象层 比业务更高一个层次了
//一个抽象类指针对象可以访问所有业务
void doNewBusiness(AbstractWorker* worker) {
    worker->doBusiness();
    delete worker;
}
 
//具体的实现层也是依赖于抽象层
void test02() {
 
    //()里new出来的对象都用同一个抽象类指针去接收
    doNewBusiness(new TransferBankWorker);
    doNewBusiness(new PayBankWorker);
    doNewBusiness(new SaveBankWorker);
}
 
int main() {
    test02();
    //输出:办理转账业务...
    //      办理支付业务...
    //      办理存款业务...
 
    return 0;
}

总结:这里的精髓其实就是中层是使用抽象类作为一个接口 还是使用非抽象类去访问 因为抽象类作为接口可以访问所有子类对象 所以中层业务和具体实现层都可以依赖于抽象类对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值