以下皆是个人理解如有不对请留言指出,谢谢!
我就代码提出我自己个人的看法:
正常定义一个类例如银行工作员,他可以执行存款,付款和转账功能,如果在现有功能上我想添加贷款功能,需要在类中添加新的功能对应的方法,那就会破坏类的封装性,修改了源代码。这时候就需要我们定义一个抽象类,他没有具体的执行哪种工作,只是有一个抽象的工作的纯虚函数。然后通过派生派生出具有若干具体功能的子类,之后如果我们想要添加新的功能就不要在类的内部进行修改,而是添加新的实现相应新功能的子类,这样就不会破坏类的封装性。这也体现了开放封闭的原则:类的改动是通过增加代码进行的,而不是修改源代码。

简单来说就是:对扩展是开放的,而对修改是封闭的

对扩展开放:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭:意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

开放封闭原则实例:

#include <iostream>
using namespace std;class BankWorker
{
public:void payM(){cout << "付款" << endl;}void saveM(){cout << "存款" << endl;}void zhuanzhang(){cout << "转账" << endl;}// ---------------- 增加新功能void daikuan(){cout << "贷款" << endl;}
};// 业务员的抽象类
class AbsBankWorker
{
public:virtual void work() = 0;  //  业务员的工作
};// 负责付款的业务员
class PayMWorker : public AbsBankWorker
{
public:virtual void work(){cout << "付款" << endl;}
};// 负责存款的业务员
class SaveMWorker : public AbsBankWorker
{
public:virtual void work(){cout << "存款" << endl;}
};// 负责转账的业务员
class zhuanZhangWorker : public AbsBankWorker
{
public:virtual void work(){cout << "转账" << endl;}
};class DaikuanWorker:public AbsBankWorker
{
public:virtual void work(){cout << "贷款" << endl;}
};// 去银行办业务
void func(AbsBankWorker *abk)
{abk->work();      // 办业务
}int main()
{
/*BankWorker *bk = new BankWorker;bk->payM();bk->saveM();bk->zhuanzhang();
*/AbsBankWorker *abs = NULL;// 付款abs = new PayMWorker;     // 找一个付款业务员func(abs);delete abs;               // 业务结束,让人家离开// 存款abs = new SaveMWorker;func(abs);delete abs;// 转账abs = new zhuanZhangWorker;func(abs);delete abs;// ---------------------------// 贷款abs = new DaikuanWorker;func(abs);delete abs;return 0;
}

设计模式之开放封闭原则相关推荐

  1. 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)

    设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...

  2. 《JavaScript设计模式与开发实践》原则篇(3)—— 开放-封闭原则

    在面向对象的程序设计中,开放封闭原则(OCP)是最重要的一条原则.很多时候,一个程序具有良好的设计,往往说明它是符合开放封闭原则的. 当需要改变一个程序的功能或者给这个程序增加新功能的时候,可以使用增 ...

  3. C++设计模式-开放-封闭原则基本概念与实例

    目录 基本概念 举一个例子 基本概念 在如那就的设计模式中,不能修改,但可以扩展的实现是一条十分重要的原则,它是开放-封闭原则(The Open-Clossed Principle,简称OCP)或开- ...

  4. 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则

    单一职责原则 单一职责原则(SRP),意思就是说,功能要单一.准确解释是,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或 ...

  5. 设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则

    (3)单一职责原则 单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因.例如,我们在写一个窗体应用程序,一般都会生成一个Form这样的类,于是我们就把各种各样的代码,像算法.数据库访问 ...

  6. 《Android之大话设计模式》--设计原则 第三章:开放封闭原则 孙悟空任弼马温一职

    应用场景举例: 孙悟空从东海龙宫拿到定海神针如意金箍棒后回到花果山,和自己的部下过着自由自在的生活.那只好景不长,因为他在地狱删除了自己和花果山所有猴子的名单,同时又拿走了定海神针,不久便被阎王和龙王 ...

  7. Android大话设计模式 第三章----开放封闭原则---孙悟空任弼马温一职

    应用场景举例 孙悟空从东海龙宫拿到定海神针如意金箍棒后回到花果山,和自己的部下过着自由自在的生活.那只好景不长,因为他在地狱删除了自己和花果山所有猴子的名单,同时又拿走了定海神针,不久便被阎王和龙王告 ...

  8. 设计模式原则之:开放封闭原则

    上一篇文章,我们讲了一个最基础的设计原则:单一职责原则.这一讲,我们来看下一个设计原则:开放封闭原则. 作为一名程序员,来了一个需求就要改一次代码,这种方式我们已经见怪不怪了,甚至已经变成了一种下意识 ...

  9. 面象对象设计6大原则之二:开放封闭原则

    转载自 面象对象设计6大原则之二:开放封闭原则 开放封闭原则(OCP),The Open Closed Principle 定义 一个软件的实体,包括类.方法.模块.应该对扩展开放,对修改关闭. 也就 ...

最新文章

  1. SpringBoot之旅第一篇-初探
  2. 五连阳回调买入法_短线高手总结的强势股回调买入法,散户需牢记
  3. SQLHELPER C#
  4. Executor框架、ThreadPoolExecutor、3种常见的线程池
  5. OpenCV运行ReID网络的实例(附完整代码)
  6. 用户 IP,里面藏了多少秘密?
  7. sql和sqlite常用查询语句
  8. 【软件工程】系统规划的不同方法
  9. selenium自动化测试——常见的八种元素定位方法
  10. 简练软考知识点整理-估算成本过程
  11. 低压电力采集平台DW710C与PC沟通
  12. 简直没法玩!iOS 13三指手势影响多款游戏操作,腾讯建议玩家谨慎更新
  13. L1-006 连续因子 (20 分)—团体程序设计天梯赛
  14. Caffe学习:使用pycaffe定义网络
  15. mysql数据库分表及实现
  16. avr单片机流水灯程序c语言,AVR单片机学习(四)C语言的流水灯验证
  17. SCADA电力系统基础业务知识
  18. 卡内基梅隆大学计算机科学博士,美国卡内基梅隆大学博士需要几年
  19. VC++分析数据包实现SMTP协议分析
  20. PDF文件不能编辑怎么办?

热门文章

  1. ruoyi 多模块部署_大数据时代,独立部署的商城系统具有哪些优势?
  2. matlab计算流函数,hanyeah
  3. Caused by: org.springframework.boot.web.server.PortInUseException: Port 8081 is already in use 端口占用
  4. Queue:poll、offer、element、peek的区别
  5. Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:
  6. 周志华《Machine Learning》 学习笔记系列(1)--绪论
  7. python预测股票价格tushare_用tushare对股票进行简单分析
  8. 对于boost锁机制结论性的介绍
  9. dex分包之--------multidex包的配置使用
  10. 延长汽车寿命的6个良好习惯