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

转载自 面象对象设计6大原则之二:开放封闭原则


开放封闭原则OCP),The Open Closed Principle


定义

一个软件的实体,包括类、方法、模块、应该对扩展开放,对修改关闭。


也就是说一个软件的实体应该通过扩展的方式来修改变化,而不是修改已有实体源代码。


开放封闭原则也是最基本需要遵守的原则,我们应该尽量保证系统的稳定性,我们在实现另外一个功能的时候不能修改之前已有的代码以免造成之前的功能出现BUG,带来不必要的麻烦,所以开放封闭原则正是引导我们去设计一个稳定、方便扩展的系统。


在实际应用中我们一般会有以下几种做法保证开放封闭原则:

1、抽象出一个接口或者抽象类,定义公共的方法,达到扩展的目的。

2、参数类型和引用类型使用接口或者抽象类,不能依赖实现类。

3、接口和抽象类不能修改,可以使用继承接口或者抽象父类的形式达到扩展的目的。


这些应用看起来也并不复杂,无非是合理地定义接口和抽象类,不同的业务功能采用不同的实现类达到扩展,像设计模式中的策略模式、模板方式模式等都是开放封闭的原则。


总结一下,开放封闭原则具有以下几个优点:

1、方便扩展,提高了可维护性。

2、不影响已有功能,提高了系统稳定性和减少了重复测试。

3、扩展之前的逻辑,提高了代码复用性。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 泛型实现方法 — 擦拭法

所谓擦拭法是指&#xff0c;虚拟机对泛型其实一无所知&#xff0c;所有的工作都是编译器做的。 例如&#xff0c;我们编写了一个泛型类Pair&#xff0c;这是编译器看到的代码&#xff1a; public class Pair<T> {private T first;private T last;public Pair(T first, T…

shell脚本启动kafka集群的多台节点

【README】 由于集群有多台机器&#xff0c;启动kafka &#xff0c;查看其状态&#xff0c;都需要每台机器去执行命令&#xff0c; 可以写个脚本基于ssh免密登录批量执行&#xff1b; 【1】启动kafak (kk.sh) #!/bin/bash case $1 in "start"){for i in centos201…

面象对象设计6大原则之三:里氏替换原则

转载自 面象对象设计6大原则之三&#xff1a;里氏替换原则里氏替换原则&#xff08;LSP&#xff09;&#xff0c;The Liskov Substitution Principle定义所有引用基类的地方必须能透明地引用其子类的对象&#xff0c;即子类可以拓展父类的功能&#xff0c;但不能修改父类已有的…

kafka命令行操作

【README】 kafka集群 -- kafka集群 3台机器 centos201 192.168.163.201 centos202 192.168.163.202 centos203 192.168.163.203【1】主题topic 操作命令 序号 命令 1 kafka-topics.sh -- create 新增 2 kafka-topics.sh -- list 查看列表 3 kafka-topics.sh -- d…

面象对象设计6大原则之四:接口隔离原则

转载自 面象对象设计6大原则之四&#xff1a;接口隔离原则接口隔离原则&#xff08;ISP&#xff09;&#xff0c;The Interface Segregation Principle定义客户端不需要强迫依赖那些它们不需要的接口。类与接口的依赖应该建议在最小的接口上&#xff0c;也就是说接口应该最小化…

Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案

起因 开发过程中在过滤器&#xff08;filter&#xff09;中注入Bean出现空指针异常&#xff0c;通过查找资料了解空指针的原因&#xff0c;特此记录。 问题分析 由于其他bean在service&#xff0c;controller层注入一点问题也没有&#xff0c;开始根本没意识到Bean无法注入是…

kafka命令行生产者消费者测试

【README】 基于命令行开启生产者&#xff0c;消费者线程&#xff0c;测试kafka的消费转发功能&#xff1b; 【1】生产者与消费者 生产者201 [rootcentos201 logs]# kafka-console-producer.sh --topic first --broker-list centos201:9092 >hello-world >sichuan-c…

面象对象设计6大原则之五:依赖倒置原则

转载自 面象对象设计6大原则之五&#xff1a;依赖倒置原则依赖倒置原则&#xff08;DIP&#xff09;&#xff0c;The Dependency Inversion Principle定义1、高层模块不应该依赖低层模块&#xff0c;两都应该依赖于抽象。2、抽象不依赖于具体细节。3、具体细节应该依赖于抽象。…

实现简单的注解型MVC框架 —— 低配SpringMVC

文章目录目标最终效果展示基本步骤1. 解析控制器类&#xff1a;2. 解析处理函数&#xff1a;3. 解析处理函数变量名&#xff1a;4. 监听TCP连接&#xff1a;5. 实现路由函数&#xff1a;知识点总结目标 与SpringMvc定义Controller类似效果 最终效果展示 主类 package org.e…

转:聊聊开发中幂等性问题(*)

【README】 这是一篇非常棒的&#xff0c; 讲解幂等性问题的post&#xff0c; 感谢原文作者&#xff1b; 转自&#xff1a; https://juejin.cn/post/6844903815552958477 幂等 (idempotence) 的概念 幂等的数学概念 幂等是源于一种数学概念。其主要有两个定义 如果在一元运…

面象对象设计6大原则之六:迪米特原则

转载自 面象对象设计6大原则之六&#xff1a;迪米特原则迪米特原则&#xff08;LOD&#xff09;&#xff0c;The Law Of Demeter&#xff0c;也称为最少知识原则定义一个对象应该对其他对象有最少的了解。也就是说一个类耦合和调用一个类应该知道的最少&#xff0c;它只关心被耦…

转-Apache kafka 工作原理介绍

转自&#xff1a; https://developer.ibm.com/zh/articles/os-cn-kafka/ 消息队列 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走。通过消息队列&#xff0c;应用程序可独立地执行–它们不需要知道彼此的…

Java内存区域(运行时数据区域)和内存模型(JMM)

原文作者&#xff1a;czwbig 原文&#xff1a;https://www.cnblogs.com/czwbig/p/11127124.html Java 内存区域和内存模型是不一样的东西&#xff0c;内存区域是指 Jvm 运行时将数据分区域存储&#xff0c;强调对内存空间的划分。 而内存模型&#xff08;Java Memory Model&am…

kafka 学习 非常详细的经典教程

转自&#xff1a; https://blog.csdn.net/tangdong3415/article/details/53432166 一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能&#xff0c;但具有自己独特的设计。 这个独特的设计是什么样的呢&#xff1f; 首先让我们看…

一个多线程死锁案例,如何避免及解决死锁问题

转载自 一个多线程死锁案例&#xff0c;如何避免及解决死锁问题 多线程死锁在java程序员笔试的时候时有遇见&#xff0c;死锁概念在之前的文章有介绍&#xff0c;大家应该也都明白它的概念&#xff0c;不清楚的去翻看历史文章吧。 下面是一个多线程死锁的例子 输出 thread1 get…

Thread打印值的含义

打印当前线程&#xff1a; log.warn("当前线程&#xff1a;"Thread.currentThread()");输出结果&#xff1a; 输出结果各部分的含义&#xff1a; Thread[ 线程名称, 线程优先级, 线程所属线程组 ]

WEB攻击手段及防御第1篇-XSS

转载自 WEB攻击手段及防御第1篇&#xff0d;XSS 概念 XSS全称为Cross Site Script&#xff0c;即跨站点脚本攻击&#xff0c;XSS攻击是最为普遍且中招率最多的web攻击方式&#xff0c;一般攻击者通过在网页恶意植入攻击脚本来篡改网页&#xff0c;在用户浏览网页时就能执行恶意…

转:权限管理——用户认证和用户授权

转自&#xff1a; https://blog.csdn.net/xdd19910505/article/details/51926540 因为做了权限的项目经理&#xff0c;so&#xff0c;恶补一下一个权限框架&#xff1a;shiro。其实作为框架首要目标是易于使用和理解。安全有时候是很复杂的&#xff0c;甚至是痛苦的&#xff0…

Spring websocket 使用@Autowired 出现null

问题 在spring websocket 中使用Autowired 出现空指针异常 原因 spring管理的都是单例&#xff08;singleton&#xff09;&#xff0c;和 websocket &#xff08;多对象&#xff09;相冲突。websocket在客户端每建立一个链接就会创建一个新的对象&#xff0c;这个对象没有任何…

WEB攻击手段及防御第2篇-SQL注入

转载自 WEB攻击手段及防御第2篇&#xff0d;SQL注入 概念 SQL注入即通过WEB表单域插入非法SQL命令&#xff0c;当服务器端构造SQL时采用拼接形式&#xff0c;非法SQL与正常SQL一并构造并在数据库中执行。 简单的SQL注入的例子&#xff1a; 例1&#xff1a;test123456 or 11; …