第二章 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][第二章 应用层] 标签(空格分隔): 未分类 网络应用是计算机网络存在的理由 首先从定义几个关键的应用层概念开始 应用程序所需要的网络服务,客户和服务器,进 ...
随机推荐
- 如何在CALayer设置滤镜
网上有很多关于CALayer中设置filtes属性的相关资料比如如何设置一个带滤镜的layer,代码如下: NSImage* image = [NSImage imageNamed:@"IM ...
- 虚拟机Linux----Ubuntu1204----退格键方向键无法使用
修改 /etc/vim/vimrc.tiny,如下: set compatible #修改为 set nocompatible #控制方向键set backspace=2 #控制退格键
- TableViewer使用
1.自定义编辑器激活方式 /** * Create a customized editor whose activation process is customized * ...
- java并发编程实践笔记
文章转自:http://kenwublog.com/java-concurrency-in-practise-note 1, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量b, 使共享变量是 ...
- Codeforces 402B --耻辱的一题
这题昨天晚上花了我1个小时50多分钟来搞,都没有搞定..后来看别人代码,直接暴力枚举第一个数的值来做..最多1000*1000的复杂度.当时怎么就没想到呢?还有为啥我的方法不对呢.. 暴力方法代码: ...
- POJ 2263 Heavy Cargo 多种解法
好题.这题可以有三种解法:1.Dijkstra 2.优先队列 3.并查集 我这里是优先队列的实现,以后有时间再用另两种方法做做..方法就是每次都选当前节点所连的权值最大的边,然后BFS搜索. ...
- 转: 在创业公司使用C++
from: http://oicwx.com/detail/827436 在创业公司使用C++ 2016-01-04开发资讯 James Perry和朋友创办了一家公司,主要是做基于云的OLAP多维数 ...
- 颗粒翻页(css3效果展示)
用css3效果做了一个颗粒翻页效果,布局上,一张图片做底层,在这张图片上用js创建一层小的行和列各为r和c的小span,给这些span分别设置background-position:用来覆盖原来的一张 ...
- js判断滚动条到底部
判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop.clientHeight.scrollHeight. scrollTop为滚动条在Y轴上的滚动距离. clientHeight为内容 ...
- scroll滚动条插件初始化问题
一种特殊场景下是滚动条容器先隐藏,点击某个东西后显示出来.然后实例化滚动条.实例 js: var flag = true; document.getElementById('btn1').onclic ...