文档章节

设计原则-开闭原则

hell03W
 hell03W
发布于 2016/11/09 12:34
字数 537
阅读 11
收藏 0

开闭原则是面向对象的可复用设计的第一块基石, 它是最重要的面向对象设计原则.

开闭原则: 一个软件实体应当对扩展开放, 对修改关闭. 即软件实体应该尽量在不修改原有代码的情况下进行扩展.

在开闭原则中, 软件实体指一个软件模块, 一个由多个类组成的局部结构或者一个独立的类.

任何软件都需要面临一个很重要的问题, 即他们的需求会随着时间的推移而发生变化. 当软件系统需要面对新的需求时, 我们应当尽量保证系统设计框架是稳定的. 如果一个软件设计符合开闭原则, 那么可以非常方便的对系统进行扩展, 而且在扩展时候无需修改现有代码, 使得系统在拥有良好适应性和灵活性的同时具备较好的稳定性和延续性. 随着软件规模越来越大, 软件寿命越来越长, 软件维护成本越来越高, 设计满足开闭原则的软件系统变得越来越重要.

为了满足开闭原则, 需要对系统进行抽象化设计, 抽象化是开闭原则的关键. 在java, C#等编程语言中, 可以为系统定义一个相对稳定的抽象层, 从而将不同的实现行为移至具体的实现层中完成. 在很多面向对象编程语言中都提供了接口抽象类等机制, 可以通过他们定义系统的抽象层, 再通过具体的类来进行扩展. 如果需要修改系统行为, 无需对抽象层做任何改动, 只需要增加新的具体类来实现新的业务功能即可, 实现在不修改原有代码的基础上扩展系统功能, 实现开闭原则的要求.

一个符合开闭原则的设计:

Reference: http://blog.csdn.net/lovelion/article/details/7537584

本文转载自:http://blog.csdn.net/lovelion/article/details/7537584

hell03W
粉丝 9
博文 145
码字总数 109892
作品 0
朝阳
程序员
私信 提问
设计模式之禅之六大设计原则-开闭原则

开闭原则 一:开闭原则的定义 --->一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 --->我们做一件事情,或者选择一个方向,一般需要经历三个步骤:What——是什么,Why——为什么,Ho...

无信不立
2015/12/24
0
0
设计模式六大原则(6):开闭原则

遵循开闭原则设计出的模块具有两个主要特征: 对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改...

LCZ777
2014/06/29
0
0
6大设计原则之6--开闭原则

开闭原则的定义 开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统,先来看开闭原则的定义:Software entities like classes,modules and functions should...

忆瑶
2016/01/03
123
0
漫谈面向对象基石之开闭原则(OCP)

开闭原则的意思是软件实体应该对扩展开发,对修改关闭(Software entities should be open for extension,but closed for modification)。实现开闭原则的途径是抽象,将需要扩展的部分抽象出...

长平狐
2012/06/08
50
0
设计模式初探--桥接模式想到的

今天公司大牛讲解案例桥接模式,由桥接模式想到了设计模式的6大原则。个人设计模式的理解总结以下: 最近这刚开始看设计模式,当然是从最基本的6大原则看起,所有的设计模式也基本上都是围绕...

宿命panthers
2016/08/09
23
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第104篇原创 文章工程: * JDK 1.8 * Maven 3.5.2 * Spring Boot 2.1....

泥瓦匠BYSocket
39分钟前
2
0
$_ENV

$_ENV数组中的内容是在PHP解析器运行时,从PHP所在服务器中的环境变量, 导入到PHP的全局命名空间, 转变为PHP全局变量。 这些变量很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能...

vinci321
54分钟前
2
0
Guava RateLimiter + AOP注解实现单机限流、统计QPS

1、基于springboot项目pom.xml添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency><d......

铁骨铮铮
今天
3
0
JAVA NIO Connection reset by peer 异常

客户端主动断开与服务端的连接,但是如果客户端掉线,服务端就接收不到了。。 异常信息 java.io.IOException: Connection reset by peerat java.base/sun.nio.ch.FileDispatcherImpl.read...

Jeremy_pan
今天
2
0
龙芯版办公软件下载

金山wps office   rpm包:http://ftp.loongnix.org/os/loongnix/1.0/os/Packages/w/wps-office-10.8.0.6472-1.a20p1.mips64el.rpm   deb包:http://packages.deepin.com/loongson/pool/......

gugudu
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部