标签:
单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。
#include <iostream> #include <string> #include <set> using namespace std; class PhoneStore { set<string> PhoneBrand; public: void AddPhoneBrand(string PhoneName); void SalePhoneBrand(); void RepairPhoneBrand(); }; void PhoneStore::AddPhoneBrand(string PhoneName) { PhoneBrand.insert(PhoneName); } void PhoneStore::SalePhoneBrand() { set<string>::iterator set_it = PhoneBrand.cbegin(); while (set_it != PhoneBrand.cend()) { cout << "我们卖场有" << *set_it << "品牌的手机出售" << endl; set_it++; } } void PhoneStore::RepairPhoneBrand() { set<string>::iterator set_it = PhoneBrand.cbegin(); while (set_it != PhoneBrand.cend()) { cout << "我们卖场能修理" << *set_it << "品牌手机" << endl; set_it++; } } int main() { PhoneStore xmx; //创建xmx手机卖场 //添加手机卖场有售和能修理的手机品牌 xmx.AddPhoneBrand("A"); xmx.AddPhoneBrand("B"); xmx.AddPhoneBrand("C"); //手机卖场有售的手机品牌 xmx.SalePhoneBrand(); //手机卖场能修理的手机品牌 xmx.RepairPhoneBrand(); return 0; }
输出:
我们卖场有A品牌的手机出售
我们卖场有B品牌的手机出售
我们卖场有C品牌的手机出售
我们卖场能修理A品牌手机
我们卖场能修理B品牌手机
我们卖场能修理C品牌手机
好的,现在我们也有了手机卖场类,而且不仅能够卖A、B、C三种品牌的手机,还能修理A、B、C三种品牌的手机。那么,如果有一天,采购了新的一种D品牌手机,但是修理部门的人还没有学会如何修理D品牌的手机,那么如果我们再添加一个D品牌的手机,输出如下:
我们卖场有A品牌的手机出售
我们卖场有B品牌的手机出售
我们卖场有C品牌的手机出售
我们卖场有D品牌的手机出售
我们卖场能修理A品牌手机
我们卖场能修理B品牌手机
我们卖场能修理C品牌手机
我们卖场能修理D品牌手机
但是,我们并不会修理D品牌的手机啊。糟糕了,这就是不遵循单一职责原则的后果,我原本只想修改出售手机的职责,没有想到的是修理手机的职责也发生了改变。所以说嘛(放个马后炮),就该遵循单一职责原则,要不然也不会出现这种坑问题,怎么办?改呗!修改后的类代码如下:
#include <iostream> #include <string> #include <set> using namespace std; class PhoneStoreSale { set<string> PhoneBrand; public: void AddPhoneBrand(string PhoneName); void SalePhoneBrand(); }; void PhoneStoreSale::AddPhoneBrand(string PhoneName) { PhoneBrand.insert(PhoneName); } void PhoneStoreSale::SalePhoneBrand() { set<string>::iterator set_it = PhoneBrand.cbegin(); while (set_it != PhoneBrand.cend()) { cout << "我们卖场有" << *set_it << "品牌的手机出售" << endl; set_it++; } } class PhoneStoreRepair { set<string> PhoneBrand; public: void AddPhoneBrand(string PhoneName); void RepairPhoneBrand(); }; void PhoneStoreRepair::AddPhoneBrand(string PhoneName) { PhoneBrand.insert(PhoneName); } void PhoneStoreRepair::RepairPhoneBrand() { set<string>::iterator set_it = PhoneBrand.cbegin(); while (set_it != PhoneBrand.cend()) { cout << "我们卖场能修理" << *set_it << "品牌手机" << endl; set_it++; } } int main() { //出售手机部门 PhoneStoreSale sale; //添加出售手机的品牌 sale.AddPhoneBrand("A"); sale.AddPhoneBrand("B"); sale.AddPhoneBrand("C"); sale.AddPhoneBrand("D"); //手机销售有售的手机品牌 sale.SalePhoneBrand(); //修理手机的部门 PhoneStoreRepair repair; //添加能修理手机的品牌 repair.AddPhoneBrand("A"); repair.AddPhoneBrand("B"); repair.AddPhoneBrand("C"); //手机修理部门能修理手机的品牌 repair.RepairPhoneBrand(); return 0; }
输出:
我们卖场有A品牌的手机出售
我们卖场有B品牌的手机出售
我们卖场有C品牌的手机出售
我们卖场有D品牌的手机出售
我们卖场能修理A品牌手机
我们卖场能修理B品牌手机
我们卖场能修理C品牌手机
标签:
原文地址:http://www.cnblogs.com/fengxmx/p/4773888.html