昨天忙了一天,晚上加班到了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大原则的更多相关文章

  1. Laxcus大数据管理系统2.0(5)- 第二章 数据组织

    第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...

  2. [翻译] 编写高性能 .NET 代码--第二章 GC -- 将长生命周期对象和大对象池化

    将长生命周期对象和大对象池化 请记住最开始说的原则:对象要么立即回收要么一直存在.它们要么在0代被回收,要么在2代里一直存在.有些对象本质是静态的,生命周期从它们被创建开始,到程序停止才会结束.其它对 ...

  3. Laxcus大数据操作系统2.0(5)- 第二章 数据组织

    第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...

  4. OO第二章总结

    OO第二章总结 电梯作业终于结束了!!! 这三周作业用多线程模拟搭建电梯的运行,我从开始对多线程的一无所知到结束时的能够完成一些多线程任务的水平,进步还是蛮大的,尽管过程有点艰难. 一.复杂度与UML ...

  5. [翻译] 编写高性能 .NET 代码--第二章 GC -- 避免使用终结器,避免大对象,避免复制缓冲区

    避免使用终结器 如果没有必要,是不需要实现一个终结器(Finalizer).终结器的代码主要是让GC回收非托管资源用.它会在GC完成标记对象为可回收后,放入一个终结器队列里,在由另外一个线程执行队列里 ...

  6. CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  7. 精通Web Analytics 2.0 (4) 第二章:选择你的网络分析灵魂伴侣的最佳策略

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第二章:选择你的网络分析灵魂伴侣的最佳策略 在Web Analytics 2.0的新世界秩序中,您必须跳出"单一真理来 ...

  8. Java 第二章 变量

    第二章 变量 变量称为:是计算机语言中能储存计算机结果或能表示值抽象概念 .变量可以通过变量名访问 int money ; //变量 money=1000; //赋值 int money=1000: ...

  9. [A Top-Down Approach][第二章 应用层]

    [A Top-Down Approach][第二章 应用层] 标签(空格分隔): 未分类 网络应用是计算机网络存在的理由 首先从定义几个关键的应用层概念开始 应用程序所需要的网络服务,客户和服务器,进 ...

随机推荐

  1. oracle数据库ORA-01654 错误的解决方法

    引言: 数据库突然报: ORA-01654: unable to extend index BO.INDEX_indexname by 311072 in tablespace 错误,上网查原因,发现 ...

  2. 手机远程调试工具spy-debugger

    关于spy-debugger   1.一站式页面调试工具,远程调试任何手机浏览器页面,任何手机移动端webview(如:微信,HybirdApp等)HTTP/HTTPS.2.spy-debugger内 ...

  3. Core Data数据操作

    1.建立学生实体,插入100条数据 2.按条件查询学生数据 3.统计学生信息 4.修改学生信息 5.删除学生数据 import UIKit import CoreData class ViewCont ...

  4. 如何删除TFS的Team Project

    我们可以使用Visual Studio或Web新建一个TeamProject,但是删除时却没有一个合适的图形界面删除我们不想要的Team Project,所以此时就可以使用命令TFSDeletePro ...

  5. Heartbeat+LVS构建高可用负载均衡集群

    1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...

  6. [转载] Android Metro风格的Launcher开发系列第一篇

    前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用.但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的 ...

  7. ZooKeeper系列1:ZooKeeper的配置

    问题导读:1.zookeeper有哪些配置文件?2.zookeeper最低配置需要哪些配置项?3.zookeeper高级配置需要配置哪些项? ZooKeeper 的功能特性通过 ZooKeeper 配 ...

  8. openfire+asmack搭建的安卓即时通讯(三) 15.4.9

    (能用得上话的话求点赞=-=,我表达不好的话跟我说哦) 上一次我们拿到了服务器端的组数据和用户信息,这就可以为我们日后使用好友系统打下基础了! 但是光是拿到了这些东西我们怎么能够满足呢?我们一个即时通 ...

  9. UVA 103 Stacking Boxes --LIS

    实际上是一个扩展维度的矩形嵌套问题. 一个物体能嵌入另一个物体中,当且仅当这个物体的所有维度的长度都小于另外一个(本题是小于等于),又因为可以旋转等变换,所以干脆将每个箱子的边从小到大排序,以便于判断 ...

  10. 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?

    来自 http://www.zhihu.com/question/19599986 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS? 想选择一个 Linux 发行版作为服务器. ...