【设计模式和面向对象设计】拾零(持续更新,个人零散笔记)
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
以后有什么关于设计模式的心得和零散的学习都放在这归纳总结,以备自己温习助记所用,不成体系,没有深度,自娱自乐,严重欢迎拍砖,不欢迎说风凉话的童鞋。
1.关于设计模式分类
这是Gof的分类方式,从面对的具体事物上将模式分为两个大类:
- Class模式:在具体化时需要使用继承(extends)
- Object模式:在实现时除了接口继承(implements)外不需要其他关键字。这个情况比上一种的模式多得多,也说明了在面向对象编程中提倡面向接口编程而不是基于继承。
从动作上,模式被分为三类:
- 创建型模式:关注对象的创建。
- 结构型模式:关注程序的结构化组织方式,属于静态模型模式。
- 行为型模式:关注各个对象在运行时如何交互,属于动态模型模式。
2.关于设计模式和面向对象设计
- 不要关注设计模式之间的关系,知道确实都相互有关联就可以了。
- 公有继承是is-a的关系,但是不要解释为“是一个”,最好在思维时想着“其行为像一个”,注意是“行为”,或者思考时用“可以用作一个”来形容,不要通过公有继承重用基类中已有的代码,公有继承是为了被重用(已经多态的使用了基对象的已有代码)。也就是说已有的多态代码通过调用Base的虚函数来使用Base&或者Base*,可以无缝的使用新的派生类对象。
- 关注模式描述的意图、应用场景。
- OOP和OOD不可混为一谈,敏捷开发是设计和编码并行的,设计模式是面向对象程序员将最初设计转化为代码时所采用的典型的实现细节。
- 基于过程的编程,中心是数据,关注的是数据流。共享数据在子程序之间建立了耦合关系(不该有的依赖)。
- 基于对象的编程,中心是事物,关注的是相互协作的代理。对象不会把数据给其他对象,对象是一组能力。
- 面向对象设计的要旨就是在于将那些可能会发生变化的东西封装,以便程序中一个部分发生变化不会根本影响其他的部分。
- 派生类之间的区别在于属性,则使用数据成员表示;若在于行为则用虚函数(C++)表示。
- 若是对实现的继承,则使用私有基类,更好的方法是采用组合的方法。
3.具体设计
1)C++动态内存的回收要注意自赋值和自操作两种特殊情况,可以使用=进行判断也可以使用延迟delete的方式实现。
2)C++中,通常情况下,公有基类的析构函数应该被声明为虚函数。
3)C++重载运算符和提供相同功能的成员函数之间的选择该运算是不是大量进行,若是则采用重载运算符,若不是则使用成员函数。因为前者会带来很多困惑,这样的困惑需要增加代码复杂度来保证不会产生什么不可预料的问题。
4.关于实际开发
- 软件部署的成本是IT部门预算最大的组成部分之一。
5.技巧
- 如果你发现一个类中除了setter和getter以外就没有别的方法了,你可以考虑把这个类换成一个struct进行表述了,因为这样的类意味着private信息封装是无意义的,其数据成员本身就应该是读写接口。
- 尽量不使用setter和getter:进行粗粒度的封装。(如果你必须在对象之间传递信息的话,可以将信息封装在其他对象中,方法返回的对象用该对象所实现的接口最好。)
Money a,b,c;
a.SetValue(a.SetValue() + b.SetValue());
转换为:
a.increaseBy(b);
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
转载于:https://www.cnblogs.com/gnuhpc/archive/2012/12/21/2827684.html
【设计模式和面向对象设计】拾零(持续更新,个人零散笔记)相关推荐
- 代码质量评判标准、设计模式、面向对象设计原则速查表
文章目录 代码质量评判标准 软件腐化的原因 提高系统可复用性的几点原则 可维护性与可复用性并不完全一致 面向对象设计原则 1. 面向对象设计的六大设计原则表 2. 图解面向对象涉及的六大原则 1. 开 ...
- 实例图解设计模式之面向对象设计七大原则
文章目录 面向对象设计原则详解 面向对象设计原则概述 常用的面向对象设计原则 单一职责原则(Single Responsibility Principe)SRP ★★★★☆ 开闭原则(Open-Clo ...
- 设计模式之面向对象设计原则
单一职责模式 一个对象应该包含单一的职责,并且该职责被完整地封装在一个类中: 最简单的面向对象设计原则,它用于控制类的粒度大小: 单一职责原则是实现高内聚,低耦合的指导方针.它是最简单但又最难运用的原 ...
- 【面试】系统架构设计(持续更新)
文章目录 服务稳定性 82原则 如何衡量系统稳定性? 事故按影响程度不同划分等级 如何提高服务稳定性? 一.系统设计规范 二.单服务稳定性 三.集群稳定性 四.稳定性专项 二.场景设计 2.1 微博热 ...
- 大功率无刷电机驱动器设计(持续更新中)
写在前面 本文是我设计无刷电机FOC驱动器和无刷电调过程中的记录,每一部分的具体设计细节仍在后续会逐步完善 AD常用的原理图封装可以到官网下载,也可以使用嘉立创的封装.我这里为了方便采购,直接采用了立 ...
- 面向对象设计原则-Principles and Patterns读书笔记三
原作者 Robert C. Martin 原文:http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf 引 ...
- 设计模式(面向对象)设计的七大原则
声明:本人设计模式模块是集合网上资料和老师课件总结的知识点,如本博客有侵权,本人即刻删. 设计模式(面向对象设计)原则,分别是: 1.开放封闭原则:对扩展开放,对修改关闭 2.单一职责原则:一个类只做 ...
- C++设计模式(李建忠主讲) 2.面向对象设计原则
C++设计模式 2.面向对象设计原则 重新认识面向对象 面向对象设计原则 依赖倒置原则(DIP) 开放封闭原则(OCP) 单一职责原则(SRP) Liskov替换原则(LSP) 接口隔离原则(ISP) ...
- 面向对象的用户体验设计(持续更新10.29)
注:本文为原创产品设计译文,由于原文较长,预计分为5次完成.首发PMCAFF,转载请私信,感谢捧场,欢迎交流,谢谢~ 原文:Object-Oriented UX 2012年6月,我在CNN.com工作 ...
- 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)
我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站--软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...
最新文章
- 几个常见规则引擎的简单介绍和演示
- python比c语言好学吗-学C语言好还是Python好?
- 常用的函数式接口_Consumer接口
- 二维gabor滤波器matlab,matlab中实现Gabor滤波器 | 学步园
- IIS下配置PHP遇到Service Unavailable的解决方法
- linux不重启更新内核,编译并使用kpath不重启更新linux-kernel
- eclipse中查看mysql_eclipse中怎样查看sqlite数据库的表
- 斗鱼上市进行时:将登陆纳斯达克 发行价区间定为11.5至14美元
- 【MySQL快速入门】牛客网:条件查询(1)基础排序
- ADO方法访问数据库的封装接口
- 用java或c语言编写真值表,离散数学C语言
- python罗盘时钟代码,罗盘时钟(原创)
- 卷积神经网络专题之上采样与下采样初步理论
- 【Kali】kali主要工具使用说明(文末附超全思维导图)
- 在线答题系统_在线题库管理系统v3.1.0
- stm32数据手册boot_stm32f103中文手册.pdf
- 指定Web打印的打印机
- codeforces 730 A Toda 2
- XCODE性能测试方法
- 给Ubuntu文件夹解锁