设计模式观后(c++还原之十六 适配器模式)

//适配器模式
//这像一个补救模式,类A的接口无法与类C不匹配;便构建一个类B,让A与B匹配,B与C匹配。
//作者用的示例:人力资源管理
//虚化 员工信息接口 类:A
class IUserInfo {
public:
	virtual string GetUserName() = 0;
	virtual string GetHomeAddress() = 0;
	virtual string GetMobileNumber() = 0;
	virtual string GetOfficeTelNumber() = 0;
	virtual string GetJobPosition() = 0;
	virtual string GetHomeTelNumber() = 0;
};
typedef map<string, string>* p_map_str;
typedef map<string, string> map_str;
//劳动服务公司的人员信息接口 类:C
class IOuterUser {
public:
	virtual p_map_str GetUserBaseInfo() = 0;
	virtual p_map_str GetUserOfficeInfo() = 0;
	virtual p_map_str GetUserHomeInfo() = 0;
};
//人员信息实现
class OuterUser : public IOuterUser {
public:
	p_map_str GetUserBaseInfo() {
		p_map_str pmapstr = new map_str;
		pmapstr->insert(make_pair("userName", "这个员工叫XXX"));
		pmapstr->insert(make_pair("mobileNumber", "这个员工电话是XXXX"));
		return pmapstr;
	}
	p_map_str GetUserHomeInfo() {
		p_map_str pmapstr = new map_str;
		pmapstr->insert(make_pair("homeTelNumber", "这个员工家庭电话是xxx"));
		pmapstr->insert(make_pair("homeAddress", "这个员工家庭地址XXX"));
		return pmapstr;
	}
	p_map_str GetUserOfficeInfo() {
		p_map_str pmapstr = new map_str;
		pmapstr->insert(make_pair("jobPosition", "这个员工职位是xxx"));
		pmapstr->insert(make_pair("officeTelNumber", "这个员工办公电话XXX"));
		return pmapstr;
	}
};
//中转角色 类:B
class OuterUserInfo : public OuterUser, public IUserInfo {
private:
	p_map_str m_baseinfo;
	p_map_str m_homeinfo;
	p_map_str m_officeinfo;

public:
	OuterUserInfo(): m_baseinfo(GetUserBaseInfo()),
		m_homeinfo(GetUserHomeInfo()),
		m_officeinfo(GetUserOfficeInfo()) {}

	string GetHomeAddress() {
		string homeaddress = m_homeinfo->find("homeAddress")->second;
		cout << homeaddress;
		return homeaddress;
	}
	string GetHomeTelNumber() {
		string hometelnumber = m_homeinfo->find("homeTelNumber")->second;
		cout << hometelnumber;
		return hometelnumber;
	}
	string GetJobPosition() {
		string jobposition = m_officeinfo->find("jobPosition")->second;
		cout << jobposition;
		return jobposition;
	}
	string GetOfficeTelNumber() {
		string officetelnumber = m_officeinfo->find("officeTelNumber")->second;
		cout << officetelnumber;
		return officetelnumber;
	}
	string GetMobileNumber() {
		string mobilenumber = m_baseinfo->find("mobileNumber")->second;
		cout << mobilenumber;
		return mobilenumber;
	}
	string GetUserName() {
		string username = m_baseinfo->find("userName")->second;
		cout << username;
		return username;
	}
};

class Client {
public:
	static void main() {
		IUserInfo* young = new OuterUserInfo;
		for (int i = 0; i < 10; i++) {
			young->GetMobileNumber();
		}
	}
};
//适配器模式基本是开发阶段遇到的补救方法吧,我想!
//实际的代码还是包装。和修饰模式一样,为了包装
//设计时候,不需!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值