- 浏览: 1586505 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
这些原则都是从《大话设计模式》里面整理出来的,现只把里面概念性的东西提取出来,说明的例子就不写了(因为用以理解并不是很贴切),这些原则都不是很容易理解,可以多查阅相关资料。
这些原则的使用一般都是为了软件的代码复用性,可扩展性,可维护性。
1. 单一职责原则:就一个类而言,应该只有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化,这种设计会遭到意想不到的破坏。软件设计真正要做的许多内容,就是发现职责并把这些职责相互分离。如果你能想到多于一个动机去改变一个类,那么这个类就有多于一个的职责。
2. 开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展,但不能修改。对于扩展是开放的(Open for extension),对于修改是关闭的(Closed for modification)。怎样的设计才能面对需求的改变却能保持相对稳定,从而使得系统可以在第一个版本之后不断推出新版本呢?无论模块多么“封闭”,都会存在一些无法对之封闭的变化。既然不能完全封闭,设计人员应该对于他设计的模块应该对那种变化进行封闭做出选择。他必须猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。也许事先不能猜测到那些地方会经常变化,但是变化发生时要立即采取行动,查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护,可扩展,可复用,灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,对于程序中每个部分都刻意进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。(http://baike.baidu.com/view/2493421.htm百科的介绍,可以好好看看)
3. 依赖倒转原则:原话解释是抽象不应该依赖细节,细节应该依赖于抽象,高层模块不应该依赖底层模块,两个都应该依赖抽象。说白了就是针对接口编程,不要针对实现编程(无论主板,CPU,内存,硬盘都是在针对接口设计的,如果针对实现来设计,内存就要对应到具体的某个品牌的主板,那就会出现换内存需要把主板也换了的尴尬)。依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是面向过程设计的了。
4. 里氏代换原则:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它观察不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化,简单来讲,子类型必须能够替换掉它们的父类型。只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础行增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。
5. 迪米特法则(最小知识原则):如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。迪米特法则其根本思想,是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。(里面举的取电脑的例子挺有说明性,小菜到公司领电脑,找到一个人,他推给另一个人,另一个又推给另一个人。。。小菜如果是一个类的话,那么他找的第一个人就是他直接打交道的类,而这个人推给了其他人相当于这个类有改动,此时任务就无法完成,系统的设计要做大的改动。而依照迪米特法则,那么应该新建一个专门负责管理电脑的部门,小菜直接与这个部门打招呼,这个部门进行统筹安排。以类的概念讲就是新建一个管理类,小菜类直接与这个类通信,这样即便其他类有改动,也不会造成大的波及)。
发表评论
-
Java SE7新特性之二进制字面量
2016-12-14 22:53 825Java SE 7中, 整数类型(byte, shor ... -
浮点数为什么不精确?为什么银行的金额不能用浮点数计算
2016-12-14 22:52 2012浮点数为什么不精确? 其实这句话本身就不精确, 相对精确一 ... -
计算机是如何计算乘法除法的(实际上都是转换为二进制加法计算)
2016-12-14 22:46 6626http://blog.csdn.net/blues1021 ... -
什么是补码、反码、负数在计算中如何表示
2016-12-14 22:39 919负数在计算机中如何表 ... -
Math.abs()绝对值取到的数不一定是正数
2016-12-14 22:37 1260Math.abs() 注释:Note that if th ... -
用BigInteger实现大素数生成算法
2016-12-06 16:42 1863转自:http://www.cnblogs.co ... -
加密(AES)、公私钥(PKI)、摘要(DIGEST)、签名(SIGNATURE)、证书(CERT)的形象解释和组合用法
2016-09-15 18:19 94061.鲍勃有两把钥匙,一把是公钥,另一把是私钥。 ... -
RSA加密公私钥生成工具(openssl)
2016-09-15 13:00 1185https://www.openssl.org/source/ ... -
RPC原理详解
2016-06-23 20:47 576RPC 功能目标 RPC 的主要功能目标是让构建分布式计算 ... -
Java并发之CountDownLatch、CyclicBarrier和Semaphore
2016-06-23 20:36 1407这次说一下 JUC 中的同步器三个主要的成员:CountDo ... -
线程间协作的两种方式:wait、notify、notifyAll和Condition
2016-06-23 20:35 574在前面我们将了很多关于同步的问题,然而在现实中,需要线程之 ... -
The final local variable xxx cannot be assigned, since it is defined in an enclo
2016-04-24 17:42 1592本文就自己编程时候遇到的一个问题,简要描述一下,并提出解决 ... -
一个奇葩的excel中无法trim的“空格”的问题
2016-03-29 16:21 1925太奇怪了。打印出来的命名是空格,就是 trim() 不管用。 ... -
List深度复制
2016-02-17 09:34 2676昨天弄了一个类似List<Map<String, ... -
Eclipse导入 jar 源码乱码问题
2015-12-15 19:43 870http://blog.csdn.net/laiwenqian ... -
Java高并发编程的各种陷阱
2015-07-25 17:49 1000www.iteye.com/blogs/subjects/ja ... -
ASM介绍(java字节码操作利器)
2015-06-10 20:46 4357转自:http://www.ibm.com/de ... -
JDK 7 中的 Fork/Join 模式(并发处理)
2015-06-03 19:47 1000转自:http://www.ibm.com/dev ... -
Java常见内存溢出异常分析
2015-06-03 16:36 826转自:http://www.iteye.com/news/3 ... -
dom4j解析带有命名空间的xml
2015-04-09 21:23 5526Element rootEle = resultDoc.g ...
相关推荐
软件开发的201个原则完整版.pdf 软件开发的201个原则是软件开发领域的重要文献,旨在总结和提炼软件开发的基本原则和最佳实践。本书共分为20章,涵盖了软件开发的各个方面,包括质量管理、开发效率、客户沟通、项目...
原则,是在编程技巧、编程语言、设计模式、工具之下的最底层的东西,它是人们在几十年的软件开发过程中不断经历、提炼出来的重要经验,体系了软件设计、开发过程中的设计哲学。 随着技术和时代的发展,这些原则可能...
### 软件开发的201个原则 #### 一、概述 《软件开发的201个原则》是一本全面阐述软件开发过程中应当遵循的原则性指导书籍。该书内容丰富,覆盖了从项目启动到交付的各个阶段,旨在帮助软件开发团队提高产品质量、...
《敏捷软件开发原则、模式与实践》一书是由著名软件开发专家、软件工程大师Robert C. Martin所著。这本书自出版以来,就被视为敏捷开发领域内的经典之作,对于软件开发人员、项目经理以及软件项目领导者来说,它提供...
在软件开发过程中,设计原则是指导开发者构建高效、可维护和扩展软件系统的重要准则。这些原则不仅提高了代码质量,还能确保团队之间的沟通清晰,降低维护成本。以下将详细阐述一些核心的软件开发设计原则。 1. **...
1. **敏捷开发原则**:强调快速响应变化,通过迭代和增量方式交付软件,以适应需求的变化和市场的不确定性。 2. **YAGNI(你不会需要它)原则**:避免过度设计,只开发当前真正需要的功能,以减少工作量和维护成本...
敏捷软件开发:原则、模式与实践(全) 敏捷软件开发:原则、模式与实践(全) 敏捷软件开发:原则、模式与实践(全) 敏捷软件开发:原则、模式与实践(全) 敏捷软件开发:原则、模式与实践(全)
《敏捷软件开发:原则、模式与实践》是Robert C. Martin(简称Uncle Bob)的一部经典著作,这本书深入探讨了敏捷开发的理念、方法和工具,尤其针对C#编程语言进行了详细阐述。作为一本实践导向的技术书籍,它旨在...
本书《敏捷软件开发:原则、模式与实践》是由全球知名的软件开发专家和软件工程大师Robert C. Martin所著,该书是关于敏捷开发与极限编程的综合性、实用性指南。书中深入探讨了软件开发人员、项目经理以及软件项目...
敏捷软件开发:原则、模式与设计.pdf敏捷软件开发:原则、模式与设计.pdf
敏捷软件开发:原则、模式与实践.pdf 敏捷软件开发:原则、模式与实践.pdf 敏捷软件开发:原则、模式与实践.pdf
本书讲授了一些原则、模式以及实践,它们可以帮助软件开发人员在追求美的程序、设计以及团队的道路上迈出第一步。本书探索了基本的设计原则,软件设计结构的通用模式以及有利于团队融为一个有机整体的一系列实践。...
本书中,享誉全球的软件开发专家和软件工程大师RobertC.Martin深入而生动地使用真实案例讲解了面向对象基本原则、重要的设计模式、UML和敏捷实践等程序员必备的知识。本书于2003年荣获第13届Jolt大奖,是C++和Java...
Martin,作为敏捷开发的权威和实践者,通过《敏捷软件开发:原则、模式与实践》一书,向读者展示了一系列核心原则、模式和实践经验,旨在解决软件开发人员、项目经理及软件项目领导在开发过程中面临的问题。...
《敏捷软件开发:原则模式与实践》是由著名软件开发专家、软件工程大师Robert C. Martin(别名Uncle Bob)所著的指导书籍,旨在为软件开发人员、项目经理以及软件项目领导提供解决实际问题的方法和策略。本书将敏捷...
敏捷软件开发:原则、模式与实践(高清PDF)
4. **源码示例**:附带的源码文件,可能是为了便于读者理解和应用书中的概念,通过实际代码展示如何在项目中实现敏捷开发原则和模式。 5. **书签和章节结构**:PDF文件带有书签,方便读者快速定位到感兴趣的部分,...
2. **原则**:书中提出了12条敏捷开发原则,如“我们的最高优先级是通过尽早并持续交付有价值的软件来使客户满意”,“欢迎随时改变需求,即使在开发的后期”。这些原则旨在鼓励灵活应对变化,促进团队与客户的紧密...
《敏捷软件开发:原则、模式与实践》(Agile Software Development: Principles, Patterns, and Practices)是由全球知名的软件开发专家、软件工程大师Robert C. Martin(俗称“Uncle Bob”)所著。这本书全面地介绍...