2、C++设计模式及实际应用-继承

关于继承和多态,它是面向对象设计思想的核心所在。它们的语法细节,很多书籍和教程上都有详细的讲解,这里就不再赘述了,本节将重点讲解继承和多态的设计思想和实际应用场景。

例如我们在开发一款手机游戏里面的弹窗界面,有用户弹窗、好友弹窗、展示弹窗、设置弹窗、提示弹窗、警告弹窗,功能如下:

  • 用户弹窗:弹入弹出动画、中型尺寸、用户信息
  • 好友弹窗:弹入弹出动画、中型尺寸、好友信息
  • 展示弹窗:弹入弹出动画、大型尺寸、展示内容
  • 设置弹窗:弹入弹出动画、大型尺寸、设置选项
  • 提示弹窗:弹入弹出动画、小型尺寸、提示信息
  • 警告弹窗:弹入弹出动画、小型尺寸、警告信息

实际项目中的功能会更多更复杂

当我们不考虑继承时候,代码实现是这样子的

class UserDailog {
public:
  void show();							// 展示弹窗
  void hide();							// 隐藏弹窗
  void setUserInfo(UserInfo& info);		// 设置用户信息
private:
  DailogSize size = DailogSize::MEDIUM;	// 中型弹窗尺寸
};

class FriendDailog {
public:
  void show();
  void hide();
  void setFriendInfo(FriendInfo& info);
private:
  DailogSize size = DailogSize::MEDIUM;      
};

class DisplayDailog {
public:
  void show();
  void hide();
  void setDisplayInfo(DisplayInfo& info);
private:
  DailogSize size = DailogSize::LARGE;  // 大型弹窗尺寸 
};

class SettingDailog {
public:
  void show();
  void hide();
  void setSettingInfo(SettingInfo& info);
private:
  DailogSize size = DailogSize::LARGE;   
};

class TipsDailog {
public:
  void show();
  void hide();
  void setTipsInfo(TipsInfo& info);
private:
  DailogSize size = DailogSize::SMALL;   // 小型弹窗尺寸 
};

class WarningDailog {
public:
  void show();
  void hide();
  void setWarningInfo(WarningInfo& info);
private:
  DailogSize size = DailogSize::SMALL;   
};

从上面的代码可以看出,每一个类都有一个重复的show、hide方法,并且size属性的值总共也只有三种。我们该如何提高代码的复用率,不再去重复的拷贝粘贴show、hide方法以及size属性呢?
继承将会是一个非常有效的解决办法,我们可以将show和hide封装成一个一级基础类BaseDailog,然后将size封装成三个二级基础类SmallDailog、MediumDailog和LargeDailog,它们都继承于BaseDailog类。

基础类的代码实现

// 一级基础类
class BaseDailog {
public: 
  void show();
  void hide();
};

// 二级基础类
class SmallDailog : public BaseDailog {
private:
  DailogSize size = DailogSize::SMALL;
};
class MeduimDailog : public BaseDailog {
private:
  DailogSize size = DailogSize::MEDIUM;
};
class LargeDailog : public BaseDailog {
private:
  DailogSize size = DailogSize::LARGE;
};

功能弹窗类的代码实现

class UserDailog : public MeduimDailog {
public:
  void setUserInfo(UserInfo& info);  
};

class FriendDailog : public MeduimDailog {
public:
  void setFriendInfo(FriendInfo& info); 
};

class DisplayDailog : public LargeDailog {
public:
  void setDisplayInfo(DisplayInfo& info);
};

class SettingDailog : public LargeDailog {
public:
  void setSettingInfo(SettingInfo& info);
};

class TipsDailog : public SmallDailog {
public:
  void setTipsInfo(TipsInfo& info);
};

class WarningDailog : public SmallDailog {
public:
  void setWarningInfo(WarningInfo& info);
};

相比于之前不使用继承的代码,使用继承的代码更加精简,同时也方便扩展,假如后续需要新增一个签到弹窗,我们只需要增加一个setSignatureInfo方法即可

SignatureDailog : public MeduimDailog {
public:
  void setSignatureInfo(SignatureInfo& info);
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值