设计模式之6大原则(6)开闭原则

设计模式之6大原则(6)开闭原则

开闭原则(OCP)

面向对象设计
中“可复用设计”的基石,是面向对象设计中最重要的原则之中的一个,其他非常多的设计原则都是实现开闭原则的一种手段。
开闭原则中“开”,是指对于组件
功能的扩展是开放的,是同意对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的改动是封闭的,即不应该改动原有的代码。
遵循开闭原则设计出的模块具有两个主要特征:
(1)
对于扩展是开放的(Open for extension)。这意味着模块的行为是能够扩展的。当应用的需求改变时,我们能够对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们能够改变模块的功能。
(2)
对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必修改模块的源码或者二进制代码。模块的二进制可运行版本号,不管是可链接的库、DLL或者.EXE文件,都无需修改。
实现开闭原则的关键就在于“抽象”。把系统的全部可能的行为抽象成一个抽象底层,这个抽象底层规定出全部的详细实现必须提供的方法的特征。作为
系统设计的抽象层,要预见全部可能的扩展,从而使得在不论什么扩展情况下,系统的抽象底层不需改动;同一时候,因为能够从抽象底层导出一个或多个新的详细实现,能够改变系统的行为,因此系统设计对扩展是开放的。
我们在
软件开发的过程中,一直都是提倡需求导向的。这就要求我们在设计的时候,要很清楚地了解用户需求,推断需求中包括的可能的变化,从而明白在什么情况下使用开闭原则。
勃兰特·梅耶一般被觉得一旦完毕,一个类的实现仅仅应该因错误而改动,新的或者改变的特性应该通过新建不同的类实现。新建的类能够通过继承的方式来重用原类的代码。衍生的子类能够或不能够拥有和原类同样的接口。梅耶的定义提倡实现
继承。详细实现能够通过继承方式来重用,可是接口规格不必如此。已存在的实现对于改动是封闭的,可是新的实现不必实现原有的接口。
在20世纪90年代,开闭原则被广泛的又一次定义因为抽象化接口的使用,在这中间实现能够被改变,多种实现能够被创建,而且多态化的替换不同的实现。相比梅耶的使用方式,多态开闭原则的定义倡导对抽象基类的继承。接口规约能够通过继承来重用,可是实现不必重用。已存在的接口对于改动是封闭的,而且新的实现必须实现那个接口。
假设一个
软件系统符合开闭原则的,那么从
软件project的角度来看,它至少具有这种优点:
可复用性好。
我们能够在软件完毕以后,仍然能够对软件进行扩展,添�新的
功能,很灵活。因此,这个
软件系统就能够通过不断地添加�新的组件,来满足不断变化的需求。
可维护性好。
因为对于已有的
软件系统的组件,特别是它的抽象底层不去改动,因此,我们不用操心软件系统中原有组件的稳定性,这就使变化中的软件系统有一定的稳定性和延续性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119140.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • [设计模式]委派模式「建议收藏」

    github地址:https://github.com/1711680493点我进入github如需了解更多设计模式,请进入我的设计模式专栏委派模式委派模式不是23设计模式中的一种.与策略模式很相似.拥有以下三种角色抽象任务角色 委派者角色 具体任务角色委派模式,就是将任务发给委派者角色,委派者角色去委派具体任务角色委派模式对外隐藏了具体实现,仅将委派者角色暴露给外部委派模式和策略模式不同的是,委派者角色和具体任务角色都要继承/实现抽象任务角色Spring框架很

  • 设计模式之六大设计原则[通俗易懂]

    设计模式之六大设计原则

  • 常用设计模式总结

    常用设计模式总结设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,是可复用面向对象软件的基础。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中…

  • 十三、外观模式—— 简化接口 #和设计模式一起旅行#

    我不想成为上帝或英雄,只想成为一棵树,为岁月而生长,不伤害任何人。 ——米沃什故事背景在英国体验了康桥的魅力,我挥一挥衣袖,不带走一片云彩,但是 英国的天空没有留下我的痕迹,但我曾去过。哈哈!从英国到法国,在浪漫的巴黎,我和设计模式MM感受到这个城市别样的风景,很是吸引人,我们决定在这里待一段时间在走。于是去政府部门办理一些手续,本来以为会花费很多时间的,因为之前办…

  • 《JavaScript设计模式》初次笔记——wsdchong[通俗易懂]

    《JavaScript设计模式》初次笔记——wsdchong[通俗易懂]《JavaScript设计模式》初次笔记前言设计模式一直久仰大名,但是没有去花时间去了解,于是今天特意花时间去看《JavaScript设计模式》(2013年6月出版)和w3cschool上的设计模式。然后做了一些笔记。以《JavaScript设计模式》为目录,以w3cschool上的设计模式为补充。讲的内容有三:设计模式、JavaScript设计模式、其他(模块化的JavaScript设计模式、jQuery设计模式、jQuery插件设计模式)。学习目的:尝试性地了解JavaScript设计模式,方

  • Android 设计模式Template Method模式

    Android 设计模式Template Method模式

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号