博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.13 以类取代类型码
阅读量:4970 次
发布时间: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

你可能感兴趣的文章
第十一周助教总结
查看>>
Python的安装与小程序的编写
查看>>
Linux常见命令
查看>>
C# 拆箱与装箱 要严格控制,数量多起来严重影响效率
查看>>
分享一篇关于C#对文件操作的日志,方法很全
查看>>
Python调用(运行)外部程序
查看>>
C#实体类对象修改日志记录
查看>>
Java设计模式の装饰者模式
查看>>
Facebook内部高效工作PPT指南
查看>>
BZOJ 1088 [SCOI2005]扫雷Mine
查看>>
502 Bad Gateway nginx/1.12.2 tomcat
查看>>
读取 appsettings.json
查看>>
Sicily 1150 简单魔方
查看>>
Exchange Server 2010邮件策略与遵从性
查看>>
【转】zigbee术语
查看>>
Model Binding is not working. MVC3 视图模型绑定不成功
查看>>
babel 的总结和理解
查看>>
Linux - 信息收集
查看>>
spring---aop(8)---Spring AOP中optimize
查看>>
stm32正点原子学习笔记(7-9)
查看>>