【设计模式C++实现】工厂模式和策略模式

前言连环的使用if/else或者switch语句来进行条件判断,在代码量不多的情况或者后续不需要怎么拓展和修改,维护起来还不算麻烦。但是,遇到一些比较复杂的项目,这种做法总会让人吐槽,显得十分的不优雅。例如这样的情况:class JudgeRole{public: std::string Judge( std::string roleName ) { std::string result = ""; if( roleName == "A" )
摘要由CSDN通过智能技术生成

前言

连环的使用if/else或者switch语句来进行条件判断,在代码量不多的情况或者后续不需要怎么拓展和修改,维护起来还不算麻烦。但是,遇到一些比较复杂的项目,这种做法总会让人吐槽,显得十分的不优雅。
例如这样的情况:

class JudgeRole
{
   
public:
    std::string Judge( std::string roleName )
    {
   
        std::string result = "";
        if( roleName == "A" )       
        {
   
            result = roleName + "has A permission";
        }
        else if( roleName == "B" ) 
        {
   
            result = roleName + "has B permission";
        }
        else if( roleName == "C" ) 
        {
   
            result = roleName + "has C permission";
        }
        return result;
    }
};

这时,如果要再增加n个角色(D,E,F…),那么只需要在后面重复增加n个else if个代码块,这样做显然十分的nt。下面介绍两种设计模式来解决:

工厂模式

首先,定义一个角色的基类接口:

// 基类
class RoleOperation
{
   
public:
    virtual std::string Op() = 0; // 纯虚函数
    virtual ~RoleOperation() {
   } // 虚析构函数
};

接着,针对不同的角色类,继承基类,并实现Op函数:

// 角色A
class A: public RoleOperation {
   
public:
    RootAdminRole(const std::string &roleName)
            : m_RoleName(roleN
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值