设计模式六大原则:单一职责原则-带你走梦幻西游(一)
2016-04-27 20:48
351 查看
依赖倒置原则(二)
开闭原则(三)
迪米特原则-带你走进梦幻西游(四)
里氏替换原则(五)
接口隔离原则(六)
定义
单一职责原则的英文名称是Single Responsibility Principle,缩写是SRP. 就一个类而言,类的职责单一,对外只提供一种功能,而它变化的原因应该仅有一个引起。通俗点讲就是一个类中的函数只为一种功能服务,相关性非常高。
案例
一组玩家组队去傲来国钓鱼。
从上面代码可以看到钓鱼类做了2种事情,除了用户和鱼之间的操作 还有用户进入退出房间的操作。而单一职责原则的定义是对外只提供一种功能,而它提供了2种功能。所以需要做解耦。代码如下:
下一篇 开闭原则-带你走进梦幻西游(二)
开闭原则(三)
迪米特原则-带你走进梦幻西游(四)
里氏替换原则(五)
接口隔离原则(六)
定义
单一职责原则的英文名称是Single Responsibility Principle,缩写是SRP. 就一个类而言,类的职责单一,对外只提供一种功能,而它变化的原因应该仅有一个引起。通俗点讲就是一个类中的函数只为一种功能服务,相关性非常高。
案例
一组玩家组队去傲来国钓鱼。
// // 非单一职责原则.cpp // c++ // // Created by 刘龙玲 on 16/5/1. // Copyright © 2016年 liulongling. All rights reserved. // #include <iostream> #include <list> #include <map> using namespace std; //五人组队AL组队钓鱼 //钓鱼玩家 class User { public: User(int id) { this->userId = id; } int getId() { return this->userId; } private: int userId; }; class Fishing { public: void fishEat() { cout<<"xx的鱼竿吃勾了...."<<endl; } //玩家进入房间 void insert(User user) { //房间最多只能5人 if(this->users.size() >=5) { cout<<"房间人数已满"<<endl; return; } this->users.push_back(user); } //玩家离开房间 void exit(User user) { //this->users.remove(user); } private: list<User> users; }; int main() { Fishing fish; for(int i = 0 ;i<6;i++){ User user(i+1); fish.insert(user); } fish.fishEat(); return 0; }
从上面代码可以看到钓鱼类做了2种事情,除了用户和鱼之间的操作 还有用户进入退出房间的操作。而单一职责原则的定义是对外只提供一种功能,而它提供了2种功能。所以需要做解耦。代码如下:
// // 单一职责原则.cpp // c++ // // Created by 刘龙玲 // Copyright © 2016年 liulongling. All rights reserved. // #include <iostream> #include <list> using namespace std; //AL组队钓鱼 //钓鱼玩家 class User { public: User(int id) { this->userId = id; this->eatTime =1; } int getId() { return this->userId; } time_t getEatTime() { return this->eatTime; } private: int userId; int eatTime; }; //钓鱼房间 class FishingRoom { public: FishingRoom() { this->users.clear(); } //玩家进入房间 void insert(User user) { cout<<"ID"<<user.getId()<<"进入房间"<<endl; //房间最多只能5人 if(this->users.size() >=5) { cout<<"房间人数已满"<<endl; return; } this->users.push_back(user); } //玩家离开房间 void exit(User user) { } list<User> getUsers() { return this->users; } private: list<User> users; }; class Fishing { public: Fishing(FishingRoom* room) { this->room = room; } void fishEat() { for(User& user:this->room->getUsers()) { if(user.getEatTime()>0) { cout<<"ID "<<user.getId()<<"的鱼竿吃勾了...."<<endl; } sleep(2); } } FishingRoom* getRoom() { return this->room; } private: FishingRoom* room; }; int main() { FishingRoom* room = new FishingRoom; Fishing fish(room); for(int i = 0 ;i<6;i++){ User user(i+1); fish.getRoom()->insert(user); } fish.fishEat(); return 0; }
下一篇 开闭原则-带你走进梦幻西游(二)
相关文章推荐
- 泛型类
- if __name__=='__main()__:
- uva 10020 Minimal coverage
- <input >上传图片文件的解说
- 《Linux内核分析》期终总结
- hdu 1176 免费馅饼
- 计算机系统的数位与进制
- SocketChannel与ServerSocketChannel
- 在用i/o流做学生管理系统是的一些错误点总结
- C#小练习
- Shell 脚本知识回顾 (六) —— Shell 函数
- 《Hibernate学习笔记二》:表与实体类的映射方法
- Python中配置matplotlib模块
- 1.win7与Ubuntu文件共享工具-Samba安装及使用方法
- android 拍照 相册 剪切以及显示功能
- jQuery--百度百科
- 剑指offer-面试题56:链表中环的入口结点
- 欢迎使用CSDN-markdown编辑器
- C/C++中各种类型int、long、double、char表示范围(最大最小值)
- Windows核心编程之CloseHandle