码迷,mamicode.com
首页 > 其他好文 > 详细

以多态取代条件表达式

时间:2016-05-29 00:49:43      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:

1.案例

话说最近直播很火嘛,反正我今天已经看了一晚上大胸了

技术分享

 

我们看到,直播间里大致分为3类观众:

1.普通观众

2.房管

3.超管

如何区分这三种观众呢?我们发现,普通观众只显示自己的昵称,房管在自己的昵称前面还有一个醒目的“房管”标记,当然,超管的昵称前有个醒目的“超管”标记。看直播的都希望自己有个标记,因为这样才能装13啦...

 

2.条件表达式

现在,我们通过编写代码来区分这3种观众。

1.编写3个类。

class CommonAudience;	//普通观众
class HouseManager;		//房管
class SuperManager;		//超管

2.浏览器端用户登录之后,用一个成员变量标记用户身份。

string strUserType;	//用户类型

3.用户发送弹幕时,使用条件选择语句判断用户类型,决定使用何种标记方式

if (strUserType == "普通观众")
{
	//不充钱你还想装逼?
	commonAudience->showMark("");
}
else if (strUserType == "房管")
{
	houseMgr->showMark("房管");
}
else if (strUserType == "超管")
{
	superMgr->showMark("超管");
}

 

好了,我们想想,每次发弹幕都要判断,未免有点不好。

有什么办法可以避免判断呢?先观察这三个对象,普通观众、房管、超管,虽然类型不一样,但是有一定的联系,他们都是我们pandaTV的用户哦。

由此,在C++中,多态的作用就是根据对象的不同类型而采取不同的行为。

回顾一下多态的用法,声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。

 

3.多态

下面对代码进行重构:

1.创建一个用户基类

class User
{
	virtual void showMark();
};

声明一个用于发送弹幕时区分用户的函数,注意是虚函数,为什么要用虚函数请自行百度。

2.创建继承它的三个子类,实现showMark的不同内容

class CommonAudience : User
{
	void showMark(){ /*什么都不显示*/ }
};
class HouseManager : User
{
	void showMark(){ /*显示房管标记*/ }
};
class SuperManager : User
{
	void showMark(){ /*显示超管标记*/ }
};

3.用户登录后,根据用户类型,创建相应的用户对象

比如

User *user = new HouseManager;
user->showMark();

这样房管每次发送弹幕时,不用判断用户类型,只需调用showMark()函数,即可在昵称前显示“房管”2字啦!

使用多态取代条件表达式,并不说明你可以完全取代,“The conditionals are getting pushed up to the top of the chain.”。比如你在登录时,需要条件判断你是哪种用户。这样仅需判断一次,以后每次发送弹幕都无需再判断咯。

以上纯属娱乐!

 

以多态取代条件表达式

标签:

原文地址:http://www.cnblogs.com/hellovenus/p/5538661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!