“开一闭”原则讲的是:一个软件实体应当对扩展开放,对修改关闭。这一原则最早由Bertrand Meyer [MEYER88]提出,英文原文是:
Software entities should be open for extension, but closed for modification.
书中列出 玉帝招安美猴王 的例子,换言之,不劳师动众、不破坏天规便是“闭”,收仙有道便是“开”。招安之法便是玉帝天庭的“开一闭”原则,通过给美猴王封一个“弼马温”的官职,便可使现有系统满足变化了的需求,而不必更改天庭的既有秩序,如下图所示。
这个例子举的非常棒,非常直观的看出是在系统中加一个模块,而不是更改原有模块。
根本还是在于抽象化!
尽管在很多情况下,无法百分之百地做到“开一闭”原则,但是如果向这个方向上的
努力能够得到部分的成功,也可以显著地改善一个系统的结构。
里氏代换原则中说,
里氏代换原则是对
任何基类可以出现的地方,子类一定可以出现。
关键步骤就是抽象化。
“开一闭”原则的补充。正如前面所谈到的,实现
而基类与子类的继承关系就是抽象化的具体体现,
“开一闭”原则的
所以里氏代换原
则是对实现抽象化的具体步骤的规范。
合成/聚合复用原则讲的是,要尽量使用合成/聚合,而不是继承关系达到复用的目的。
显然,合成/聚合复用原则是与里氏代换原则相辅相成的,两者又都是对实现“开一闭”
原则的具体步骤的规范。前者要求设计师首先考虑合成/聚合关系,后者要求在使用继承
关系时,必须确定这个关系是符合一定条件的。
遵守合成/聚合复用原则是实现“开一闭”原则的必要条件;违反这一原则就无法使系
统实现“开一闭”原则这一目标。
迪米特法则讲的是,一个软件实体应当与尽可能少的其他实体发生相互作用。
当一个系统面临功能扩展的时候,其中会有一些模块,它们需要修改的压力比其他一
些模块要大。最后的结果可能是这些模块需要修改或者不需要修改。但是不论是哪一种情
况,如果这些模块是相对孤立的,那么它们就不会将修改的压力传递给其他的模块。
这就是说,一个遵守迪米特原则设计出来的系统在功能需要扩展时,会相对更容易地
做到对修改的关闭。也就是说,迪米特法则是一条通向“开一闭”原则的道路。
- 大小: 11.4 KB
分享到:
相关推荐
首先,我们来看看Java模式中的六大设计原则: 1. 开闭原则(Open-Closed Principle):一个模块或组件应该是对扩展开放,对修改关闭。这意味着当需要添加新功能时,我们应尽量避免修改现有代码,而是通过添加新的...
读书笔记:java 23种设计模式 开闭原则 依赖倒转原则 迪米特法则 设计模式思想 Java入门demo
通过阅读《Java游戏编程读书笔记》这本书,你可以深入了解这些概念并学习如何将它们应用到实际项目中。文档中的内容可能涵盖了Java游戏开发的基本原理、代码示例、最佳实践以及常见问题的解决方案。通过深入学习和...
读书笔记:软件设计原则与设计模式 Java实现
在本篇【JAVA面向对象编程(孙卫琴)读书笔记(三)】中,我们将深入探讨Java编程语言的核心概念——面向对象编程。这篇读书笔记基于孙卫琴老师的著作,旨在帮助开发者更好地理解和应用面向对象的设计原则和技巧。下面...
读书笔记:Java设计模式全汇总设计模式的六大原则博客介绍和示例代码。
《Java并发编程实践》这本书是Java开发者深入理解并发编程的重要参考。以下是对书中关键知识点的总结: 1. **线程和进程的区别** - **线程**:是程序执行的最小单位,一个进程中可以有多个线程,它们共享同一块...
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...
### Java EE 学习笔记:面向对象编程深入解析 #### 面向对象与面向过程对比 面向对象编程(Object-Oriented Programming, OOP)是现代软件开发中的一种核心编程范式,它强调以对象作为基本单位进行设计和编码。与...
作者提到他“可以扩展多种‘蝉’”,这暗示了设计模式中的开闭原则(Open/Closed Principle),即软件实体应该对扩展开放,对修改封闭。这样,当系统需要增加新的功能时,可以增加新的类或模块,而无需修改现有代码...
### Struts2 技术内幕读书笔记(1) #### WEB开发浅谈 ##### 面向对象浅谈 面向对象编程(Object-Oriented Programming,OOP)是一种软件开发范式,它通过模拟现实世界中的对象及其交互来构建程序结构。这种编程...
【RabbitMQ读书笔记】 一、简介 RabbitMQ 是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议,旨在提供可靠且灵活的消息传递服务。RabbitMQ 在当前的软件行业中被广泛使用...
在"notes-master"这个压缩包中,我们可能找到了一系列以Markdown格式编写的Java相关的读书笔记。这些笔记可能涵盖了Java语言的基础概念,如数据类型、控制流、类与对象、接口、异常处理、集合框架、多线程、输入输出...
2. **软件开发的基础(代码201)**:此阶段会深入到具体的编程语言和开发工具,可能包括常用的编程语言(如Java, Python, C++等),版本控制工具(如Git),以及基本的软件设计模式和原则。 3. **中间软件开发...
通过阅读《Java Enterprise 最佳实践》的读书笔记,我们可以深入了解这些实践并将其应用到实际项目中,提升Java应用在企业环境中的表现。同时,结合文中给出的源码和工具,可以进一步加深对JDBC编程的理解和应用。
标题为“书:读书笔记&技术心得”的压缩包文件,很显然,它包含了一个作者在阅读过程中所做的笔记和对技术的理解,这可能是关于编程、系统设计、软件工程或者任何与信息技术相关的主题。 在描述中提到的“一个记录...
例如,JSP开发者可以借鉴PetShop的分层架构,使用Java的DAO(Data Access Object)模式代替.NET的DAL,通过Spring框架实现依赖注入,使用Hibernate或MyBatis作为数据访问层工具,同时结合Spring的AOP(面向切面编程...
一起读书app是一款专为教育教学设计的应用程序,旨在提供丰富的阅读资源和便捷的在线学习体验。v1.0.0是该应用的初始版本,通常包含了基础功能和初步的用户界面设计。下面将从多个方面详细解析这款应用及其可能包含...