博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.13 以类取代类型码
阅读量:4973 次
发布时间:2019-06-12

本文共 3231 字,大约阅读时间需要 10 分钟。

【1】源代码

1 #include 
2 #include
3 4 class Student 5 { 6 public: 7 Student(int id, QString name, int status) 8 : m_nID(id) 9 , m_name(name)10 , m_status(status)11 {}12 13 int getId()14 {15 return m_nID;16 }17 void setId(int id)18 {19 m_nID = id;20 }21 22 QString getName()23 {24 return m_name;25 }26 void setName(QString name)27 {28 m_name = name;29 }30 31 int getStatus()32 {33 return m_status;34 }35 void setStatus(int status)36 {37 m_status = status;38 }39 40 QString toString()41 {42 return QString("Student [id = %1, name = %2, status = %3]")43 .arg(QString::number(m_nID)).arg(m_name).arg(QString::number(m_status));44 }45 46 public:47 static const int INVALID;48 static const int VALID;49 50 private:51 int m_nID;52 QString m_name;53 int m_status;54 };55 56 const int Student::INVALID = 0;57 const int Student::VALID = 1;58 59 void main()60 {61 Student *pStudent = new Student(1, "张三", Student::VALID);62 qDebug() << pStudent->toString();63 }64 65 // run out:66 /*67 * "Student [id = 1, name = 张三, status = 1]"68 */

 【2】以类取代类型码

1 #include 
2 #include
3 4 class StatusCode 5 { 6 public: 7 StatusCode(int nCode) 8 : m_nCode(nCode) 9 {}10 11 int getCode()12 {13 return m_nCode;14 }15 16 void setCode(int code)17 {18 m_nCode = code;19 }20 21 QString toString()22 {23 return QString("StatusCode [code = %1]").arg(QString::number(m_nCode));24 }25 26 private:27 int m_nCode;28 };29 30 class Student31 {32 public:33 Student(int id, QString name, StatusCode status)34 : m_nID(id)35 , m_name(name)36 , m_status(status)37 {}38 39 int getId()40 {41 return m_nID;42 }43 void setId(int id)44 {45 m_nID = id;46 }47 48 QString getName()49 {50 return m_name;51 }52 void setName(QString name)53 {54 m_name = name;55 }56 57 StatusCode getStatus()58 {59 return m_status;60 }61 void setStatus(StatusCode status)62 {63 m_status = status;64 }65 66 QString toString()67 {68 return QString("Student [id = %1, name = %2, status = %3]")69 .arg(QString::number(m_nID)).arg(m_name).arg(m_status.toString());70 }71 72 private:73 int m_nID;74 QString m_name;75 StatusCode m_status;76 };77 78 void main()79 {80 Student *pStudent = new Student(1, "张三", StatusCode(1));81 qDebug() << pStudent->toString();82 }83 84 // run out:85 /*86 * "Student [id = 1, name = 张三, status = StatusCode [code = 1]]"87 */

【3】总结

类中有一个数值类型码,但它并不影响类的行为。以一个新的类替换该数值类型码。

在使用Replace Type Code with Class (以类取代类型码)之前,你应该先考虑类型码的其他替换方式。

只有当类型码是纯粹数据时(也就是类型码不会在switch语句中引起行为变化时),你才能以类来取代它。

更重要的是:任何switch语句都应该运用Replace Conditional with Polymorphism (以多态取代条件表达式)去掉。

为了进行那样的重构,你首先必须运用 Replace Type Code with Subclass (以子类取代类型码)或Replace Type Code with State/Strategy (以状态策略取代类型码),把类型码处理掉。

 

Good Good Study, Day Day Up.

顺序 选择 循环 总结

转载于:https://www.cnblogs.com/Braveliu/p/7359850.html

你可能感兴趣的文章
[轉]redis;mongodb;memcache三者的性能比較
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
构建Docker Compose服务堆栈
查看>>
浮点数内存如何存储的
查看>>
JsonCpp 的使用
查看>>
问题账户需求分析
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
此博客不再发表对自己私事的看法
查看>>
导致Asp.Net站点重启的10个原因
查看>>
【PMP】Head First PMP 学习笔记 第一章 引言
查看>>
抓住云机遇编排工作 搞定复杂IT工作流
查看>>
MYSQL的longtext字段能放多少数据?
查看>>
MTK 平台上如何给 camera 添加一种 preview size
查看>>
mysql定时备份自动上传
查看>>
17岁时少年决定把海洋洗干净,现在21岁的他做到了
查看>>
《写给大忙人看的java se 8》笔记
查看>>
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>