第二章 OO大原则
昨天忙了一天,晚上加班到了12点,虽然工作有时候比较累,但是整体来讲还是比较轻松的,国企加上我是今年才毕业的应届生,导致了现在这种情况。工资也真的不算高...但我觉得最开始还是要踏踏实实一点比较好。学习才是王道嘛,技术好了,功底扎实了,工资自然应该不是问题。今天看的是第二章,OO大原则,这一章可能主要涉及到一些设计模式的基本原则和设计模式,因为这毕竟是软件开发人员的必修课,是成为一个好的软件开发人员的开始,之前完完整整的看了一遍《大话设计模式》,确实写的不错,如果没看过设计模式的可以拿他作为起步嘛,只有起步了,才会有进步。再强调一下,设计模式真的很重要,我们携手共进步吧!
笔记
设计模式就像是武术招式,你可以无招胜有招,但是那毕竟是巧合或者已经达到了出神入化的境地,还有一种则是研习前辈们的招式,在适当的时候用了适当的招式,这就是高手。前辈们研究出了“设计模式”这一套高招,我们可以按照相应的招式,书写出美妙高效的代码。而其中的原则,则是这门武功的内功心法,兄弟们,好好练习吧。
1、原则:
2、单一职责原则(SRP):适配器模式就是单一职责的完美呈现,当其中一个类有两个职责,操作数据库和判断权限的时候,我们就可以将判断权限的职责单独放到适配器类里面,从而通过其进行访问数据,这样的实现就体现了单一职责原则。同样,外观模式(facade)也同样体现这个原则。
3、单一职责是由引起变化的原因决定,而不是由功能职责觉得,虽然职责常常是引起变化的原因,但有时却未必,应该审时度势。当有一个变化能引起多个职责发生改变的时候,就该考虑把这些职责放到一个类中统一管理,所以,避免相同的职责被分散到多个类中,和避免一个类拥有过多的职责一样重要。
3、开放封闭原则(OCP):对扩展开放,意味着有新的需求的时候,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着一旦设计完成,就可以独立的完成其工作,而不要对类进行任何修改。
4、实现开放封闭的核心思想就是对抽象编程,而不是对具体编程。通过继承和多态机制,覆写其方法以达到扩展的目的。实现它的具体模式包括模板方法模式(Template)和策略模式(Strategy)。
5、依赖倒置原则(DIP):著名的好莱坞法则:不要调用我们,我们会调用你,是对依赖倒置原则最形象的诠释。核心思想就是依赖于抽象。
(1)高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
(2)抽象不应该依赖于具体,具体应该依赖于抽象。
6、抽象的稳定性决定了系统的稳定性,因为抽象是保持不变的,依赖于抽象是面向对象的精髓,也是依赖倒转原则的核心思想。
7、接口隔离原则(ISP):在实际编程当中,“胖”接口会要求继承她的类必须实现她的所有方法,但有些对于类是没有必要,所以为了避免这种情况,就有了接口隔离原则。
8、分离接口的两种方式:
(1)委托分离,通过增加一个新的类型来委托客户的请求,隔离用户和接口之间的的直接依赖,但是会增加系统开销。
(2)多重继承分离,通过接口多继承来实现客户需求,这种方式值得推荐。
9、Liskov替换原则(LSP):核心思想就是子类必须能够替换其基类。子类继承父类,其关系是IS-A的确定的,在.NET语言中以is为关键字判断两个对象是否兼容。
10、从客户程序的预期来保证子类和父类在行为上的相容,是Liskov原则的另一关键。
第二章 OO大原则的更多相关文章
- Laxcus大数据管理系统2.0(5)- 第二章 数据组织
第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 将长生命周期对象和大对象池化
将长生命周期对象和大对象池化 请记住最开始说的原则:对象要么立即回收要么一直存在.它们要么在0代被回收,要么在2代里一直存在.有些对象本质是静态的,生命周期从它们被创建开始,到程序停止才会结束.其它对 ...
- Laxcus大数据操作系统2.0(5)- 第二章 数据组织
第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...
- OO第二章总结
OO第二章总结 电梯作业终于结束了!!! 这三周作业用多线程模拟搭建电梯的运行,我从开始对多线程的一无所知到结束时的能够完成一些多线程任务的水平,进步还是蛮大的,尽管过程有点艰难. 一.复杂度与UML ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 避免使用终结器,避免大对象,避免复制缓冲区
避免使用终结器 如果没有必要,是不需要实现一个终结器(Finalizer).终结器的代码主要是让GC回收非托管资源用.它会在GC完成标记对象为可回收后,放入一个终结器队列里,在由另外一个线程执行队列里 ...
- CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- 精通Web Analytics 2.0 (4) 第二章:选择你的网络分析灵魂伴侣的最佳策略
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第二章:选择你的网络分析灵魂伴侣的最佳策略 在Web Analytics 2.0的新世界秩序中,您必须跳出"单一真理来 ...
- Java 第二章 变量
第二章 变量 变量称为:是计算机语言中能储存计算机结果或能表示值抽象概念 .变量可以通过变量名访问 int money ; //变量 money=1000; //赋值 int money=1000: ...
- [A Top-Down Approach][第二章 应用层]
[A Top-Down Approach][第二章 应用层] 标签(空格分隔): 未分类 网络应用是计算机网络存在的理由 首先从定义几个关键的应用层概念开始 应用程序所需要的网络服务,客户和服务器,进 ...
随机推荐
- 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句
如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...
- 续Gulp使用入门三步压缩图片
gulp 压缩图片 压缩 图片文件可降低文件大小,提高图片加载速度. 找到规律转换为 gulp 代码 规律 找到 images/ 目录下的所有文件,压缩它们,将压缩后的文件存放在 dist/image ...
- NPOI 读取excel到DataTable 读取隐藏列 读取公式列
处理思路: 1.打开excel 用NPOI进行读取: 2.读取第一个Sheet: 读取过程中: a.先设置相应列 不隐藏 b.读取Cell时 先判断是否的包含公式 相应代码如下: public sta ...
- tika提取pdf信息异常
org.apache.tika.sax.WriteOutContentHandler$WriteLimitReachedException: Your document contained more ...
- 【iOS 初见】第一个简单的 iOS 应用
本实例来自 <iOS编程(第4版)>,介绍如何编写一个简单的 iOS 应用. 功能为:在视图中显示一个问题,用户点击视图下方的按钮,可以显示相应的答案,用户点击上方的按钮,则会显示一个新的 ...
- 设计模式笔记感悟 - Creational篇
body,td,p { // 这对大括号里描述网页的背景 margin-left:40px; margin-right:40px; font-size: 10pt; } div.vim { width ...
- Redis安装,mongodb安装,hbase安装,cassandra安装,mysql安装,zookeeper安装,kafka安装,storm安装大数据软件安装部署百科全书
伟大的程序员版权所有,转载请注明:http://www.lenggirl.com/bigdata/server-sofeware-install.html 一.安装mongodb 官网下载包mongo ...
- Android系列之UI组件----Menu菜单
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 贴图在Unity中的设置
例如:一张512X512的图片占用的内存大小,计算方法:512*512*4/1024=1.024MB. 如果在贴图设置里设置成真彩色那就等于计算的值,设置成16位色彩,内存占用会减少. 在进行性能优化 ...
- java 21 - 13 IO流之 合并流
SequenceInputStream :表示其他输入流的逻辑串联. 构造方法摘要 SequenceInputStream(Enumeration<? extends InputStream&g ...