软件开发培训:开闭原则丨穿衣服的例子

  文章来源:http://www.zretc.com/technologyDetail/477.html

  软件开发中经常需要注意的原则有哪些呢?开闭原则就是其中之一

  “开闭原则“图示如下:

  让我来解释一下,设计规则如下:

  “软件实体(类,模块,函数等)应该对扩展开放,对修改关闭。”

  这意味着在最基本的层面上,你可以扩展一个类的行为,而无需修改。这就像我能够穿上衣服,而对我的身体不做任何改变,哈哈。

  同学:太有意思啦. 你可以通过穿不同的衣服来改变你的外貌, 但是你不必为此改变自己的身体。所以你是对扩展开放的, 对吧?

  小卓:是的。在面向对象设计中, 对扩展开放意味着模块/类的行为可以被扩展。那么当需求变化时我们可以用各种各样的方法制定功能来满足需求变更或者新需求。

  同学:除此之外你的身体是对修改关闭的。 我喜欢这个例子. 所以, 对于核心模块或类的代码在需要扩展的时候不应该被修改。你能结合具体例子解释下吗?

  小卓:当然了, 先看下面的例子.这个就不支持 "开放-关闭" 原则:

  类的层次结构已经表明了这是违反"开放-关闭"原则的。

  你看, 客户端类和服务端类都是具体的实现类。因为, 如果某些原因导致服务端实现改变了, 客户端也需要相应变化。

  同学:有道理. 如果一个浏览器的实现和一个指定的服务器(比如IIS)紧紧的耦合在一起 , 那么如果服务器由于某种原因替换成了另外的 (比如, Apache) 浏览器也需要做相应的变化或者被替换掉. 多么恐怖的一件事啊!

  小卓:非常正确!因为下面的将是一种好的设计方案:

  类的层次关系展示了"开放-关闭"原则

  在这个例子中, 添加了一个抽象的Server类, 并且客户端保持了抽象类的引用, 具体的Server类实现了这个抽象Server类。所以, 由于某种原因Server的实现类发生了改变, 客户端不需要做任何改变。

  这里的抽象的Server类对修改关闭, 具体的Server实现类对扩展开放。

  同学:我的理解是, 抽象是关键, 对吗?

  小卓:是的, 基本上, 你要对系统的核心业务进行抽象, 如果你抽象化做的比较好, 很可能, 在扩展功能的时候它们不必做任何改变 (比如Server就是一个抽象的概念)。你所定义的抽象的实现 (比如, IIS服务器实现了 Server) 和抽象的代码 (Server) 要尽可能的多。这样在客户端代码中不需要做任何修改就会允许你定义一个新的实现(比如, ApacheServer)。

  下一篇文章,我们将讨论“面向对象之里氏替换原则”

  出处:开源中国

  译者:K6F, 凡程子, 叫我蝴蝶吧, 王薇, 人头马没面, 铂金小龟, 风子, nikeff1108, sigai

  链接:http://www.oschina.net/translate/how-i-explained-ood-to-my-wife?lang=chs&page=4#

  了解更多软件开发知识欢迎访问中软国际教育集团技术知识库!

时间: 2024-10-07 11:43:39

软件开发培训:开闭原则丨穿衣服的例子的相关文章

设计模-设计原则-开闭原则

(转)面向对象设计原则之开闭原则 有两个含义: 1.一个实体对修改关闭,对扩展开放 2.其他实体的扩展,不需要(不能)修改本实体 开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则.开闭原则由Bertrand  Meyer于1988年提出,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进行扩展. 在开闭原则的定义中,软件实体可以指一个软件模块.一个由多个类组成的

设计模式原则之开闭原则

开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段. 遵循开闭原则设计出的模块具有两个主要特征: (1)对于扩展是开放的(Open for extension).这意味着模块的行为是可以扩展的.当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为.也就是说,我们可以改变模块的功能. (2)对于修改是关闭的(Closed for modification).对模块行为进行扩展时,不必改动模块的源

面向对象设计原则之开闭原则

http://blog.csdn.net/lovelion/article/details/7537584 为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键.在Java.C#等编程语言中,可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成.在很多面向对象编程语言中都提供了接口.抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展.如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有

C#软件设计——小话设计模式原则之:开闭原则OCP

前言:这篇继续来看看开闭原则.废话少说,直接入正题. 软件设计原则系列文章索引 C#软件设计——小话设计模式原则之:依赖倒置原则DIP C#软件设计——小话设计模式原则之:单一职责原则SRP C#软件设计——小话设计模式原则之:接口隔离原则ISP C#软件设计——小话设计模式原则之:开闭原则OCP 一.原理介绍 1.官方定义 开闭原则,英文缩写OCP,全称Open Closed Principle. 原始定义:Software entities (classes, modules, functi

架构中的设计原则之开闭原则(OCP) - 《java开发技术-在架构中体验设计模式和算法之美》

开闭原则OCP(Open for Extension,Closed for Modification).开闭原则的核心思想是:一个对象对扩张开放,对修改关闭. 其实开闭原则的意思就是:对类的改动是通过增加代码进行的,而不是改动现有的代码.也就是说,软件开发人员一旦写出了可以运行的代码,就不应该去改变它,而是要保证它能一直运行下去,如何才能做到这一点呢?这就需要借助于抽象和多态,即把可能变化的内容抽象出来,从而使抽象的部分是相对稳定,而具体的实现层是可以改变和扩展的. 根据开闭原则,我们改变一个软

软件设计七大原则之开闭原则

开闭原则: 对于一个软件实体如类,模块和函数应该对扩展开放,对修改关闭. 实际意义:软件的变化不应该通过修改已有的代码来实现变化. 实现手段:用抽象构建框架,用实现扩展细节 优点:提高软件系统的可复用性及可维护性 案例Coding: 课程类拥有id.name.原有价格.并通过实现ICourse接口去构建方法 Test:将课程相关信息输出 此时的类结构图为: 清晰简洁的类结构图,类和接口实现了依赖关系 此时当有打折活动时,我们需要对课程的价格进行打折,并要求输出打折价跟原价.首先我们会想到在原有的

.NET 高级架构师 架构师之路(5)---开闭原则

2 开闭原则(Open-Closed Principle,OCP) 2.1 什么是开闭原则     开闭原则是面向对象设计中"可复用设计"的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段. 1988年,Bertrand Meyer在他的著作<Object Oriented Software Construction>中提出了开闭原则,它的原文是这样:"Software entities should be open for e

第2章 面向对象的设计原则(SOLID):6_开闭原则

6. 开闭原则(Open Closed Principle,OCP) 6.1 定义 (1)一个类应该对扩展开放,对修改关闭.要求通过扩展来实现变化,而且是在不修改己有的代码情况下进行扩展,也不必改动己有的源代码或二进制代码. (2)在软件生命周期内,变化是一个既定的事实,在设计时尽量适应这些变化,以提高项止的稳定性和灵活性,真正实现“拥抱变化”.而开闭原则告诉我们要通过扩展来实现这些变化而不是修改原来代码. (3)修改关闭,并不意味着软件不做任何的改动,低层模块的变更,必然要高层模块进行耦合,否

设计模式之禅之六大设计原则-开闭原则

开闭原则 一:开闭原则的定义        --->一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.        --->我们做一件事情,或者选择一个方向,一般需要经历三个步骤:What——是什么,Why——为什么,How——怎么做(简称3W原则,How取最后一个w)        --->对于开闭原则,我们也采用这三步来分析,即什么是开闭原则,为什么要使用开闭原则,怎么使用开闭原则? 二:如何使用开闭原则        --->抽象约束.