【设计模式攻略】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原则都是个宏观的概念,而我所 举的例子都相对比较片面,像这个例子说白了也就是个多态的应用罢了,只算个特例而已。

Docker系列之(五):使用Docker Compose编排容器

1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。 使用Compose 基本上分为三步: Dock...

Docker源码分析(二):Docker Client创建与命令执行

1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖、便捷的软件集成测试与部署之道。在团队开发软件时,Docker可以提供可复用的运行环境、灵活的资源...

【设计模式攻略】OO设计原则之SRP-单一职责原则

概要 所谓单一职责,一个类或接口应该只负责一种职责,当某个类或接口会因为两种职责的变更而引起变化时,我们就需要分割职责。 目的 一个类或接口应该只会因一种职责而发生改变 实例与效果 先看...

【设计模式攻略】OO设计原则之ISP-接口隔离原则

概要 所谓接口隔离,就是把可以分离的方法分离到不同的接口类中,防止在实际应用中被迫去实现一些本并不需要的接口方法。其实一定程度上跟SRP原则类似。只是ISP更关注与接口实现和使用,而SRP更关注于接口...

【设计模式攻略】OO设计原则之DIP-依赖倒置原则

概要 依赖倒置原则,从字面意思看的话,就是反映的是模块间依赖关系的问题。 目的 降低耦合,降低变更引发的风险,提高扩展性 实例与效果 先让我们从宏观上来看下,举个例子,我们经常会用...

【设计模式攻略】OO设计原则之LSP-Liskov替换原则

概要 什么是所谓的替换原则?开发中我们通常会通过继承实现一些子类来达到功能的扩展,比如假设我们有基类B,有个B类型的指针或引用作为某个函数的参数,这时我们创建了子类C继承于B,如果当把指向C类对象的...

Java Web设计模式之OCP(开闭原则)

  • 2014年07月13日 18:47
  • 11KB
  • 下载

OO与设计模式的原则、目标

前两天,和一朋友聊到OO设计原则时,对设计模式有了更深的了解,在这里总结一下,与大家分享。 OO(Object–Oriented )面向对象    OO方法(Object-Oriented Met...

IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)

转:点击打开链接 定义   一个软件实体(如类、模块、函数)应当对扩展开放,对修改关闭。 定义解读   在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是...

OO与设计模式的原则、目标

前两天,和一朋友聊到OO设计原则时,对设计模式有了更深的了解,在这里总结一下,与大家分享。 OO(Object–Oriented )面向对象    OO方法(Object-Oriented Met...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【设计模式攻略】OO设计原则之OCP-开放-关闭原则
举报原因:
原因补充:

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