【设计模式攻略】OO设计原则之OCP-开放-关闭原则

原创 2012年03月31日 08:41:07
概要
何谓开放关闭,其实就是对扩展是开放的,对修改是关闭的。前半句好理解,后半句什么意思?进一步说明,就是扩展的同时对固有既定模块是不需要再修改的,如果还要问什么是固有既定模块,抱歉,文字还真不好解释,到后面穿插实例再来说明吧。

目的
对扩展开发,对修改关闭

实例与效果
先看个例子,比如我们需要一个封装访问MySql数据库的类。定义一些数据库操作API供外部调用,代码和类图如下所示:

class Database {
public:
   void connect();
   void execute();
   void commit();
   void rollback();
};

然后你兴致勃勃地开始用了。然后有一天,需求又增加了,需要支持SQL Server了,你可能觉得,这很简单,类里加个Type参数,if-else区别处理,然后搞定。但是,需求继续膨胀,SQLite,Oracle.....都要支持,好,继续else-if,else-if的加吧,加着加着你突然发现原来运行正常的MySql出现异常了,debug半天发现原来耦合太多,你改着改着就把原来既有的改错了。让我们一起来反省下,如果开始就考虑下OCP呢?卡看这样做是不是更好。

class IDatabase {
public:
   virtual void connect() = 0;
   virtual void execute() = 0;
   virtual void commit() = 0;
   virtual void rollback() = 0;
};
class MySqlDB : public  IDatabase {
public:
   virtual void connect();
   virtual void execute();
   virtual void commit();
   virtual void rollback();
};

好,让需求变化的更疯狂些吧, SQL Server, SQLite,Oracle.....只是每次追加一个继承于 IDatabase独立的类而已,而既有的数据库封装类是不需要任何改动的。这里的 IDatabase, MySqlDB就属于前面所谓的固有的既定模块,而它们在你扩展时是不受影响的。而调用方Client,也只是需要改变创建的数据库对象而已。
现在关于OCP,有那么点感觉了吧?这就是所谓的对扩展开放,对修改关闭。
最后声明一点, 所有OO原则都是个宏观的概念,而我所 举的例子都相对比较片面,像这个例子说白了也就是个多态的应用罢了,只算个特例而已。

OO设计五大原则

OO的五大原则是指SRP、OCP、LSP、DIP、ISP 1. SRP(Single Responsibility Principle 单一职责原则)  单一职责很容易理解,所谓单一职...
  • u014117094
  • u014117094
  • 2015年07月08日 23:13
  • 861

OO六大设计原则总结(上层码农必会)

一直以来都严格遵循OO的原则来进行开发(用的工具是C++和Qt) 什么是设计原则? 设计原则是基本的工具,应用这些规则可以使你的代码更加灵活、更容易维护,更容易扩展。 基...
  • suxinpingtao51
  • suxinpingtao51
  • 2015年07月29日 15:45
  • 1740

设计模式(一)设计六大原则

1. 单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因。 从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担的职责过多,就...
  • itachi85
  • itachi85
  • 2016年01月10日 16:44
  • 9067

(设计模式1)设计模式5大原则:SOLID原则

SOLID是几个重要编码原则的缩写 SRP: The Single Responsibility Principle 单一责任原则 OCP: The Open Closed Principle 开放封...
  • kkgbn
  • kkgbn
  • 2016年10月26日 17:17
  • 1253

设计模式是五大或六大还是七大原则?

设计模式是五大或六大还是七大原则?设计模式有五大原则或七大原则之分 按五大原则划分:1、2、3和4(算一种)、5和6(算一种)、7 按六大原则划分:1、2、3、4、5和6(算一种)、7 按七大原...
  • cadenzasolo
  • cadenzasolo
  • 2016年01月23日 00:43
  • 780

设计模式六大原则: 一国两制 -- 开放封闭原则

开放封闭原则 OCP(Open Closed Principle ) 对于拓展是开放的(Open for extension), 对于更改是封闭的(Closed for modification)...
  • u011240877
  • u011240877
  • 2016年08月11日 23:27
  • 2130

OO原则的五大原则

现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望对大家有帮助,在学习和使用OO设计的时候,我们应该明白:OO的出现使得软件工程师们能够用更接近真实世界的方法描述软件系统。然而,软件毕竟是建立...
  • ruihaol
  • ruihaol
  • 2016年08月29日 23:24
  • 870

设计模式六大原则例子(六)-- 开放封闭原则(OCP)例子

之前我们对设计模式的六大原则做了简单归纳,这篇博客是对开放封闭原则进行的举例说明。 开放封闭原则的意义软件实体应该对扩展开放,对修改关闭,其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已...
  • yabay2208
  • yabay2208
  • 2017年06月30日 11:53
  • 349

设计模式六大原则和每个原则所体现的设计模式

 参考文献:设计模式六大原则   --http://www.uml.org.cn/sjms/201211023.asp 设计模式六大原则   2013-01-25 15:...
  • yangzishiw
  • yangzishiw
  • 2015年03月04日 20:50
  • 920

23种设计模式与6大原则综述

设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无...
  • k605726828
  • k605726828
  • 2015年11月22日 21:27
  • 691
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【设计模式攻略】OO设计原则之OCP-开放-关闭原则
举报原因:
原因补充:

(最多只允许输入30个字)