GoF之开-闭原则

告别Vysor!用Scrcpy在Mac上无线投屏安卓手机(附魅族16th闪退修复实战) 本文详细介绍了如何在Mac上配置和使用开源投屏工具Scrcpy,实现安卓手机无线投屏的高效解决方案。从基础环境准备到高级功能调优,包括无线连接配置、输入控制增强、多设备管理和性能优化等实用技巧,特别针对魅族16th等机型的闪退问题提供了修复方案,帮助用户彻底告别Vysor等商业软件。 阅读详情

    看完设计模式之后才知道设计模式大行其道是为什么,其根本原因就是为了实现代码的复用性,增加代码的可维护性、可扩展,以及灵活性。设计模式的实现遵循了一些原则,从而代码达到这些目的,设计模式对理解面向对象的三大特征有很好的启发,不看设计模式,很难深层地体会到面向对象开发带来的好处 。在刚开始学习中,很难做到将这些模式融汇贯通,所以这个需要我们在编码前多思考,等到想充分了,在开始实践编码。下面是六大原则之一的开闭原则:

开闭原则(Open Close Principle)

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

   开-闭原则是对于面向对象的核心表现。对于学习面向对象和设计模式都有很大的帮助。

解析:

   开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。这个原则有两个特性,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。面对新增加的需求,提前写好的类不可能是完全就没有一点没有不改的地方,设计人员必须知道设计的模块应该对哪种变化封闭,然后构造抽象来隔离那些变化。尽量做到不修改现有代码,而是改动新增加的代码

   比如,刚开始需求只是写加法程序,很快在client类中完成后,此时变化没有发生,需求让再添加一个减法功能,此时会发现增加功能需要修改原来这个类,这就违背了开放-封闭原则,于是你就应该考虑重构程序,增加一个抽象的运算类,通过一些面向对象的手段,如继承、多态等来隔离具体加法、减法与client耦合,需求依然可以满足,还能应对变化。此时需求要添加乘除法功能,就不需要再去更改client及加减法类,而是增加乘法和除法子类即可。

深化:

   在编写代码的过程中,绝对的不修改时不存在的,让设计人员知道设计模块中哪些是变化的,就是在我们最初编写代码时,假设变化不会发生,当变化发生时,我们就创建抽象来隔离以后发生同类的变化。

    我们希望的是在开发工作展开不久就知道可能发生的变化,查明可能发生的变化所等待的时候越长,要创建正确的抽象就越困难。

   注意事项:开发人员应该仅对程序中呈现出现频繁变化的那些部分做出抽象,然而对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意,拒绝不成熟的抽象和抽象本身一样重要。开放-封闭原则,可以保证以前代码的正确性,因为没有修改以前代码,所以可以保证开发人员专注于将设计放在新扩展的代码上。

 

简单的用一句经典的话来说:过去已成历史(不可修改),但现在和未来掌握在自己手中(可扩展)。


    设计模式有六个原则,开闭原则只是其中之一,后面会发表其他五个原则+总结,之后开始分析23个设计模式,敬请期待。

《备考系统架构设计师》 - 专栏介绍和目录 本专栏包括所有历年真题及详解、章节知识核心总结、精选高分论文、补充知识、专题总结等。欢迎订阅专栏。 阅读详情

相关推荐

一条龙开发指南:MCP AI Agent 理论+项目实战开发你的MCP Server

MCP(Model Connection Protocol)是Anthropic于2024年推出的AI模型连接协议,旨在为AI模型提供开放、通用的标准化接口,类似于“USB-C”接口,使AI模型能够无缝连接各种数据源和工具。MCP通过标准化协议解决了AI系统集成中的碎片化问题,提升了开发效率和系统可靠性。开发者可以通过简单的配置,快速接入不同的MCP Server,实现AI模型的多样化应用。MCP支持多种协议,如Stdio、SSE等,并通过JSON-RPC格式进行数据传输。文章还以腾讯云代码助手为例,展示了

杨不易呀 3045

GOF23之责任链模式

一、核心作用: 处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理请求,如果能则处理,如果不能则传递给链上的下一个对象 二、常见应用场景: 1、审批 2、开发场景:try-catch 三、责任链模式的实现: LeaveRequest:员工提交请求类 Leader:抽象的请假责任处理类 Director:处理类 四、代码示例: 一、员工提交请求类: pac...

朱进博的博客 364

西门子1200,与V90和步科MD60第三方伺服PN通讯

需要注意的是回零方式的选择,因为V90是绝对值编码器,这里回零模式选择模式7,系统自动根据编码器反馈以及组态的机械参数,计算出轴的位置,并且掉电保持。在线访问中,找到对应的网卡,以及下面扫描到的设备,可以在线修改ip地址和profinet名称,注意一定要和组态中的完全一致。以上硬件组态上完成,主要是gsd文件导入后,添加硬件,建立连接,修改ip和profinet名称,添加报文。1- 博图V18内,设备组态,网络视图中,拖入V90以及MD60伺服,并与PLC创建连接。向厂家索要GSD文件,PN的描述文件。

weixin_37596954的博客 2463

GOF23之桥接模式

一、核心作用: 处理多层继承结构,处理多维度变化的场景,将各维度设计为独立的继承结构,使每个维度可以独立扩展 二、常见应用场景: 1、JDBC驱动 2、AWT中的Peer架构 未采用桥接模式可能会出现多重继承,复用性差,类的数量也过多 三、代码示例: 品牌类: package com.hezeu.bridge; /** * @Classname Brand * @Description TOD...

朱进博的博客 1359

手把手教你用ArduPilot搭建低成本无人车(附APM飞控+有刷电调配置清单)

本文提供了一份基于ArduPilot开源平台搭建低成本智能无人车的详细实战指南。核心内容包括APM架构飞控的选型、双向有刷电调的兼容性配置与校准、系统连接逻辑,以及通过Mission Planner地面站进行参数调校和自主导航功能设置的完整流程,帮助爱好者快速实现从手动控制到自主行驶的跨越。

java5的博客 850

4、LTE无人机认证:保障通信安全的新方案

本文针对LTE网络中无人机通信存在的安全风险,提出了一种基于可信第三方GCS的新型认证协议。该协议通过非对称加密和哈希函数保护IMSI等敏感信息,防止身份泄露、中间人攻击、拒绝服务攻击和位置追踪等威胁。利用Scyther工具对协议进行形式化分析,验证了其在机密性、一致性和活性等方面的安全属性,证明该方案能有效提升无人机在LTE网络中的通信安全性与隐私保护能力。

pink的博客 61

深入了解static关键字(面试)

概念 static是Java中的关键字-修饰符,用于修饰变量、方法、代码块、内部类 静态变量 被static修饰的成员变量 静态变量会随着类的加载而加载到静态区,与类同级,也叫类变量。 可以直接通过类名+. 的方法来直接调用,也可以通过对象来调用 静态区会对存储的静态变量赋予初始值。类创建的所有对象的属性都要共享同一个静态变量,所有对象的操作的是同一个静态变量 如果属性需要被所有对象共享,就加上static修饰 静态变量可以定义在方法中吗? 不能,静态变量与类同级,需要最先加载,但是方法中的内容只有等到方法

朱进博的博客 376

【AI智能体】Spring AI Tool 从使用到实战详解

Spring AI Tool

congge 5865

GOF23之中介者模式

一、核心作用: 如果一个系统中对象那个之间的联系呈现为网状结构,对象存在大量多对多的关系,将导致关系及其复杂,这些对象称为“同事对象” 我们可以引入一个中介者对象,使各同事对象只跟中介者对象打交道,将复杂的网络结构化解为星状结构,解耦多个同事对象之间的交互关系 每个对象都持有中介者对象的引用,只跟中介者对象打交道,通过中介者对象统一管理这些交互关系 二、常见应用场景: MVC模式(C为中介者...

朱进博的博客 379

yolov5直接调用zed相机实现三维测距(python)

zed代码比较简洁,但是一定要把环境配置好,后续自己会把他当做普通双目标定,去对比分析效果,并完善相关功能。

积极向上的mr.d的博客 1万+

华为OD机试真题:明日之星选举 (Java/Py/C/ C++/JS/GO)

华为OD机试(机考)双机位C卷 【明日之星选举】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 明日之星选举。

qq_45776114的博客 919

数据库约束条件

约束条件 1、主键约束 关键字:primary key 特点:非空唯一 添加: 创建表时字段后跟 primary key 添加表时添加使用:constraints pk_student_sno primary key(sno) 表存在的情况下: 添加:alter table 表名 添加(add)constraints 主键名 关键字(primary key(字段名)) alter t...

朱进博的博客 2055

深入大模型-13-大模型Skills应用之标准目录结构和开发一个Skill的步骤

首先对比Prompt工程,上下文工程,Skills工程,MCP工具的概念与区别,然后介绍Skill的标准目录结构,同时描述了开发一个Skill的步骤和最佳实践。

qq_20466211的博客 748

设计模式与游戏完美开发(0)

设计模式与游戏完美开发第一章第二章读书笔记,主要包含常见设计原则和书中引出的游戏范例介绍

qq_43813560的博客 701

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java设计模式0--设计模式简介

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式的起源 软件领域的设计模式起源于建筑学。 1977年,建筑大师Alexander出版了《A Pattern Language:Towns, Building, Construction》一书。受Alex...

weixin_30684743的博客 66

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式原则

看了设计模式,最后看的总是感觉他们有很大的相似之处,就像是世界上万事万物都有其生存法则一样.仔细分析其实设计模式都是围绕一条主线来的。这就是设计模式的原则。你可以把设计原则比作一门语言。把设计模式当作这门语言编写出来的程序。如果你精通了语言剩下的编码就是很简单的事情了. 对于层出不穷的设计模式,比如Gof的23种设计模式,MVC模式,到底应该怎样去学习,如果我们单纯的一个一个的研究设计模式本身,那么只能是越看越多,越来越乱.其实我们只要抓住设计模式的原则,就能很清楚的分析出它为什么会这么做.

李守宏 6431

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

设计模式及其学习方法的个人理解

设计模式往往被赋予神秘和神圣的光环,也经常作为面试的问题,区别你是初级开发人员还是中高级开发人员的一个方法就是问设计模式。设计模式也并不好学习,个人认为GoF的经典著作非常的难懂,这或许是因为他们站在非常高的位置上,他们的经验极为丰富,以致于如果你没有相关的经验,基本上跟他们不在一个频率上。市面上也有很多试图把设计模式叫的通俗易懂的书籍,不乏成功之作。而无论如何,如果你没有实际的经验,看再多的书也

nokiaisacat的专栏 1052

玄子Share 设计模式 GOF 全23种 + 七大设计原则

此文主要内容为,面向对象七大设计原则(OOD Principle),GOF(Gang Of Four)23种设计模式,拓展的两个设计模式,简单工厂模式(Simple Factory Pattern),空对象模式(Null Object Pattern),以及工厂模式与策略模式(Factory And Strategy Pattern)之间的区别,两个设计模式较为相似,细节上需要分清,每个设计模式都分为了八步介绍,先对设计模式进行简单介绍,尽量一句话概述,方便记忆,再以现实生活中的场景举例,抛出问题解决问题

qq_62283694的博客 3442

设计模式入门:从 GoF 分类到 SOLID 原则实战

一个类只负责一项职责。

無言的博客 1192

实践GoF的23的设计模式:SOLID原则(下)

本文中将讲述SOLID原则中的接口隔离原则和依赖倒置原则。

华为云官方博客 1267

“开-闭”原则

        “开-闭”原则讲的是:一个软件实体应当对扩展开放,对修改关闭。          英文原文是:Software entities should be open for extension, but closed for modification.         这个原则说是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码...

conkeyn的专栏 226

[设计模式-1]23种GOF设计模式及7大原则概述

java 设计模式 原则

心流时间的博客 1421

【设计模式系列24】GoF23种设计模式总结及软件设计7大原则

设计模式总结及软件设计七大原则前言软件设计7大原则开闭原则(Open-Closed Principle,OCP)里氏替换原则(Liskov Substitution Principle,LSP)依赖倒置原则(Dependence Inversion Principle,DIP)单一职责原则(Single Responsibility Principle,SRP)接口隔离原则(Interface Segregation Principle,ISP)迪米特法则(Law of Demeter,LoD)合成复用原则

zwx900102的博客 2927

PHP接口的学习

最近学习 Php5 接口的过程中遇到了困难,书中说是实现多重继承的一种方式,但我依然不知道具体该如何实现。在网上查PHP接口的资料很少,就查了java的,其实基本上都差不多。看完《澄清 Java(接口与继承)》这篇文章才恍然大悟...

cjqbk811121的博客 73

GoF的主要设计原则与其23种设计模式快速解读

文章目录1 简介2 面向对象三大属性3 面向对象七大设计原则4 GoF 的 23 种设计模式4.1 GoF简介4.2 23种设计模式4.2.1 创建型模式4.2.2 结构型模式4.3.3 行为型模式5 总结参考资料 1 简介 很多新手程序员往往会有这样的经历:在一个实际项目中,随着项目需求的不断细化和丰富,某些类的功能会不断增加丰富。新加入的功能有些很类似,有些区别很大,有些甚至完全不相关。由于缺...

郝伟老师的博客——大数据、并行计算与人工智能时代 1171

面向对象设计的六大原则简介

OOD基本上有6大原则,而实际上都是互补的,也就是说一些原则需要利用另一些原则来实现自己。6大原则如下:1) Open-Close Principle(OCP),开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。这是最重要也是最为抽象的原则,基本上我们所说的Reusable Software既是基于此原则而开发的。其他的原则也是对它的实现提供了路径。2) Liskov Substitu

Cavingdeep的Java专栏 2758
上一篇: UML之用例图
下一篇: GoF之单一职责原则
mayfla
博客等级 码龄14年 312粉丝 191原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值