文档章节

开放关闭原则

金馆长1
 金馆长1
发布于 2015/12/13 18:14
字数 441
阅读 25
收藏 1

1.开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如以Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。

2.核心思想:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

3.使用原因:软件需求总是变化的,世界上没有一个软件的是不变的,因此对软件设计人员来说,必须在不需要对原有系统进行修改的情况下,实现灵活的系统扩展。

4.如何做到对扩展开放,对修改封闭呢?
        实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是开放的。
        对于违反这一原则的类,必须通过重构来进行改善。常用于实现的设计模式主要有Template Method模式和Strategy 模式。而封装变化,是实现这一原则的重要手段,将经常变化的状态封装为一个类。




© 著作权归作者所有

上一篇: 依赖倒转原则
下一篇: 单一职责原则
金馆长1
粉丝 17
博文 43
码字总数 29363
作品 0
海淀
程序员
私信 提问
面象对象设计6大原则之二:开放封闭原则

开放封闭原则(OCP),The Open Closed Principle 定义 一个软件的实体,包括类、方法、模块、应该对扩展开放,对修改关闭。 也就是说一个软件的实体应该通过扩展的方式来修改变化,而不是修...

java技术栈
2017/08/13
0
0
设计模式六大原则(6):开闭原则

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

LCZ777
2014/06/29
26
0
Java设计原则

一、OO设计基础 1、封装 2、继承 3、多态 4、抽象 二、OO设计原则 1、找出应用中需要变化之处,让它们独立出来,不要和那些不需要变化的代码混在一处。 2、针对接口编程,而不是针对实现编程...

whc20011
2016/06/14
29
0
设计模式之禅之六大设计原则-开闭原则

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

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

开闭原则应该是六个原则中概念最模糊的一个,例子也是和其他的原则相似的,所以只引用几句比较一针见血的说明: 用抽象构建框架,用实现扩展细节。 单一职责原则告诉我们实现类要职责单一;里...

stone_
2015/11/13
162
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
18
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部