面向对象——类设计(三)
来源:互联网 发布:单片机自动光控窗帘 编辑:程序博客网 时间:2024/06/06 04:20
模型类与控制类
让保存数据的类,仅用于数据的持有,除此之外,不向外界提供过多的修改接口(甚至是访问接口),修改(有时是访问)接口统一交由其控制类。举一个不恰当的例子,试卷类仅用于记录成绩,只有教师类(控制类)可对成绩进行一系列的修改和访问。
让控制类(操纵数据的类),仅用于操作动作(而不保存数据),操纵的方式主要有两种:
维护模型类的对象作为控制类的私有成员变量
将模型类的实例以参数的形式传递给控制类的相关成员函数
这多少已经开始有点 MVC 的设计思想了。
“谁来监督监督者?”,也存在控制类的控制类,使更一层的抽象和提取。但“我附庸的附庸,不是我的附庸”,正如企业的董事长不会事无巨细,直接管理流水线上的每一个员工一样,控制类的控制类也不直接操作数据,而是通过中间的桥梁和媒介,位于中间层的空间类。
所以 MVC 的设计思想,自然内嵌了一种分层的关系。
继承体系
父类和子类(甚至爷类和孙类)之间的不同和差异能有多少?有时不需要很大,只需要重写某一虚函数,甚至唯一的差异在私有成员的持有上,私有成员自然带来构造函数的不同;
子类比父类功能和属性(成员函数和成员变量)上会只多不少,这里的多
,意味着一种功能的拓展,“站在了巨人的肩膀人”。
空参空实现的构造函数的意义
在类的继承层次较深时,如果继承关系中的一层,给出了一种形式的构造(非空参构造)时,编译器就不会为当前类再提供以调用当前类成员函数默认构造为职责的空参构造形式,底层类的构造函数在其初始化参数列表的位置就要显式的给出其父类的实现。
如何在一个类的内部实现规则可选、实现模式可调
所谓规则、所谓模式,都是有限状态集,对有限状态最有力的模拟类型即是枚举类型变量,我们定义这些状态或规则所对应的枚举类型,以一个该枚举类型变量作为该类的构造函数所需的参数(该类内部需维护一个私有的该枚举类型变量),在相关的不同规则、模式下的处理函数时。
class Model{public: enum criterion { normal, case1, case2}; Model(criterion criter):_criter(criter){} void process() { switch (_criter) { case normal: break; case case1: break; case case2: break; default: break; } }private: const criterion _criter;};
- 面向对象——类设计(三)
- 设计模式解析(三)——传统面向对象设计的局限
- 设计模式——面向对象的三大特性
- GIS面向对象模型设计(三)
- 面向对象的设计原则(三)
- 黑马程序员—面向对象(三)
- Java基础—面向对象(三)
- JS面向对象(三)— 接口
- 面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现)
- 从抽象到模式——面向对象之旅(三)、设计模式的力量
- 面向对象软件设计原则(三) —— 软件实体的设计原则
- 如何设计一门语言(三)——什么是坑(面向对象和异常处理)
- 面向对象的设计模式(三)——Bridge模式
- 可复用面向对象软件基础——设计模式(三)之抽象工厂模式
- Java面向对象设计模式(三)——单例模式
- 面向对象设计原则三
- 面向对象(三)—枚举
- 面向对象——类设计(一)
- keyEnumerator与Enumerator迭代遍历神器
- 毕业设计准备
- Android测试系列之Local Unit Test
- php fpm nginx解析
- MySQL递归查询
- 面向对象——类设计(三)
- 遍历聚合对象中的元素——迭代器模式
- 杭电1180——诡异的楼梯(BFS+优先队列)
- PAT (Top Level) Practise 1005Programming Pattern (35)
- 联合稀疏SOMP代码
- php使用explode分割字符串新手容易忽略的问题
- 通过汇编一个简单的C程序,分析汇编代码理解计算机工作原理
- Log4J日志配置详解
- 系统框架 springmvc mybatis Bootstrap html5 shiro maven