软件可维护性能差的主要原因
[list=A]
过于僵硬:不能轻松的加入新的功能[/list]
[list=B]
过于脆弱:修改一处可能波及到很多其他的地方[/list]
[list=C]
复用率低:现有的代码依赖于其他的东西,想要重用这个代码就很困难[/list]
[list=D]
黏度过高:改动总是以破坏原始意图和原始设计框架的方式进行[/list]
设计原则
1。OCP原则(开闭原则)
Software entities should be opon for extension but closed for modification.
对可变性的封装:当一个组件被认为是可变的时候,应该对这个可变性的组件进行封装,以便使其内部的变化只作用在内部范围内,不会延伸到其他地方。
一个可变性的不同的表象就是同一个继承结构中的具体的子类。在设计的时候不应该把不同的可变性混合在一起。
2。里氏代换原则:
如果每个C1类型的对象O1,都有一个C2类型的对象O2,使得以C1定义的程序里面的O1都可以换成O2,那么就说C2是C1的一个子类。
里氏代换原则要求在使用基类的地方其子类也一定适用,这条原则是在进行OOD时候对对象抽象过程中的一个验证方法。比若说设计了一个超类A,我们又设计了A的子类,那么检查我们的设计是否合理,就应该根据里氏代换原则,看看应用代码中使用到A的对象的地方,时候可以换成其子类对象也同样成立,如果不成立那么则证明子类并不真正是超类的孩子。
3。依赖倒转关系:
通常在设计分层结构的时候,我们总是设计成高层依赖于低层,而依赖倒转的要求就是低层要依赖于高层,这里面简单的例子就是Java中的接口技术,根据依赖倒转关系原则,就有了针对接口编程概念:一个具体的Java类应该只实现其抽象类和接口中的方法,而不是给出多余的方法。
4。抽象类于接口:
a.抽象类可实现部分功能,而接口不可以,所以抽象类的子类就拥有了抽象类实现的那部分功能。
b.抽象类的实现存在于其等级结构中,而接口的实现不仅可以实现此接口,同时也可以实现其他接口。这样这个子类可以对外提供不同的服务。
c.如果在已有的子类,为其定义一个抽象的父类是比较困难的,因为这会改变其等级结构,而为其定义一个接口却是容易的。
d.接口是定义混合型类型的理想工具。
5。ISP(接口分离原则):
这个原则强调的是如何来设计接口,它强调了应该按角色来对接口划分,而不应该把所有角色的功能都归结到一个接口中去。它强调不要把很多接口作为优化对象。
例如:有一个网站有一个全文搜索的功能,系统有一个Interface来提供所有的操作功能,比如说管理索引,搜索操作等等。根据ISP原则应该按角色划分,对每一个角色都设计一个接口,如上例就应该分别设计一个索引管理接口和搜索操作接口。
6。CARP合成/聚合复用原则:
7。LoD迪米特原则:也成为最少知识原则
如果一个类不必与其他类直接通信,那么两个类就不应该相互作用,也就是说彼此都不知道对方的存在。如果一个类需要调用另外一个类的方法,可以通过第三方来调用。
这个原则就是为了封闭组件的可变性,是它们的变化不会波及到其他地方。
以上是我学习Design Pattern的一些理解,可能有不恰当的地方,希望与大家交流。我是对这方面知识还算是个菜鸟,希望大家能给我提点建议,对于这方面的知识应该如何去学习效率比较高一些。现在学起来感觉很是抽象,可能以前也做过一些东西,不过考虑到这方面的东西并不是很多。第一次发贴!庆祝一下,^_^
分享到:
- 2006-11-26 00:06
- 浏览 3733
- 评论(7)
- 论坛回复 / 浏览 (6 / 6340)
- 查看更多
相关推荐
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
书中包含的中文和英文版本以及学习笔记可以帮助读者深入理解每个模式的核心思想和应用场景。英文网页版则提供了在线阅读的便利,方便随时随地查阅。无论你是初学者还是有经验的开发者,这些资源都将是你提升编程技能...
良葛格的《Design Pattern学习笔记》不仅涵盖了经典的GOF设计模式,还额外介绍了几种多线程模式,这使得这份学习笔记成为了一个宝贵的学习资源。下面将对其中的部分设计模式进行详细介绍。 #### 二、GOF设计模式 ...
本文档为学习设计模式时整理收集的博客、文档、笔记。版权为原作者所有 设计模式 设计模式(Design Pattern)代表了最佳的实践,在面向对象的编程中被很多老鸟们反复使用。使用设计模式有很多好处: 可重用代码 保证...
designPattern 项目介绍 根据学习《大话设计模式》一书,所记录的笔记以及代码编写 安装教程 所需环境为java1.8 eclipse 或IDEA均可,项目为纯Java项目 使用说明 仅供参考,如有不合理的地方,欢迎指正!!! 邮箱:...
Java Design PatternsJava 设计模式学习笔记,简单易懂,每个模式都有相应的代码示列,帮助学习理解。在线阅读地址:设计原则创建型模式作用:将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式...
设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的经验总结。...在DesignPattern-master这个压缩包中,你可以找到关于这些模式的详细讲解和实例代码,为你的Java开发之旅提供宝贵的参考资料。
DesignPattern Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示...
-GOF GOF笔记
### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...
以下是一些在尚学堂300Java设计模式部分学习笔记中涉及的设计模式的知识点: 创建型模式: 创建型模式主要解决对象创建的问题,确保系统的灵活性和封装创建细节。学习笔记中提到了5种创建型模式: 1. 单例模式...
设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...
10. **单例模式**:《设计模式(Design Pattern) —— 单例模式(Singleton).mht》介绍了设计模式中的单例模式,这是一种确保类只有一个实例并提供全局访问点的设计模式,常用于配置管理、缓存等场景。 通过这些学习...
在这个名为"learn-design-pattern"的项目中,作者旨在通过学习和参考GitHub上的资源以及GOF(Gang of Four,即《设计模式:可复用面向对象软件的基础》一书的四位作者)的经典著作,来理解和掌握设计模式的精髓。...
编程范式与设计模式 SOLID、经典设计模式、函数式编程 · · Introduction | 前言本篇的所有参考代码归纳在 仓库中。Nav | 关联导航本书的精排目录导航版请参考 。About | 关于ContributingContributions are what ...
在“design-pattern-notes-master”这个压缩包中,可能包含了不同章节的学习资料,比如“第3章”和“第4章”的代码。通常,这些章节会逐步介绍各种设计模式,包括它们的意图、结构、参与者以及模式的优缺点。学习者...
本笔记主要依据曾探的著作《JavaScript设计模式与开发实践》进行整理,涵盖了设计模式的基本知识,以及创建、结构、行为、状态和策略等模式的应用。 **基础知识** 在深入设计模式之前,我们需要理解一些基本概念,...
配套博客学习笔记: ://yubuntu0109.github.io/tags/design-and-pattern/ 参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :check_mark:简单工厂模式( Simple Factor ...
Design-Pattern 学习笔记 ' ██████╗ ███████╗███████╗██╗ ██████╗ ███╗ ██╗ ██████╗ █████╗ ████████╗████████╗███████╗████...