第二章 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][第二章 应用层] 标签(空格分隔): 未分类 网络应用是计算机网络存在的理由 首先从定义几个关键的应用层概念开始 应用程序所需要的网络服务,客户和服务器,进 ...
随机推荐
- Tomcat报java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler
最近在生产环境部署Tomcat的时候,在启动的时候,在控制台报"java.lang.ClassNotFoundException: 1catalina.org.apache.juli.Fil ...
- Java中的静态方法和单例模式比较
区别 单例模式方法 静态方法 实例 创建实例 无 运行 类的实例的方法 类的方法 也可以通过实例化,在通过类的实例来运行 是否可以被重写 可以 可以(子类的该方法也必须是静态方法) 调用其他静态方法 ...
- matlab中subplot函数的功能
转载自http://wenku.baidu.com/link?url=UkbSbQd3cxpT7sFrDw7_BO8zJDCUvPKrmsrbITk-7n7fP8g0Vhvq3QTC0DrwwrXfa ...
- java帮助文档下载
JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和 ...
- C++ new(1)
如果找工作的同学看一些面试的书,我相信都会遇到这样的题:sizeof 不是函数,然后举出一堆的理由来证明 sizeof 不是函数.在这里,和 sizeof 类似,new 和 delete 也不是函数, ...
- Openstack-Ceilometer-SNMP的使用
1. 物理服务器配置 1.1安装 #yum install -y net-snmp net-snmp-utils 1.2 配置 复制[附件]中snmpd.conf文件到/etc/snmp/目 ...
- UVALive 6263 The Dragon and the knights --统计,直线分平面
题意:给n条直线,将一个平面分成很多个部分,再给m个骑士的坐标,在一个部分内只要有一个骑士即可保护该部分,问给出的m个骑士是不是保护了所有部分. 解法:计算每个骑士与每条直线的位置关系(上面还是下面) ...
- (转)priority_queue的用法
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式.先写一个用 STL 里面堆算法实现的与真正的 ...
- java 14 -5 System类
System类包含一些有用的类字段和方法.它不能被实例化. 方法: 1.public static void gc():运行垃圾回收器. 2.public static void exit(int s ...
- Redis集群知识解析
redis集群在启动的时候就自动在多个节点间分好片.同时提供了分片之间的可用性:当一部分redis节点故障或网络中断,集群也能继续工作.但是,当大面积的节点故障或网络中断(比如大部分的主节点都不可用了 ...