常用设计模式与六原则详解

服务器安装Ubuntu 18.04.2 LTS超详细步骤(小白图文详解) 服务器安装Ubuntu 18.04.2 LTS超详细步骤(小白图文详解) 本文不包括启动盘制作步骤,相关内容可自行百度 华为服务器 1 插入u盘,关机重启 2 初始化界面后进入到系统的BIOS设置界面 (华为服务器按Del键,不同品牌方法不同) 3 进入的时候,华为的服务器默认设置了BIOS密码,因此需要输入之前预设的密码。 注意密码大小写问题,若密码输错三次,则需重启 4 密码输入以后,进入... 阅读详情

设计模式六大原则

参考链接

1.单一职责
  • 最简单的面向对象设计原则,用于控制类的颗粒大小。
  • 一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
  • 单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则。
2.开闭原则
  • 面向对象的可复用设计的基石,是最重要的面向对象的设计原则,也是面向对象的目标。
  • 一个软件实体应该对拓展开放,对修改关闭。软件应该在拓展的时候尽可能不去修改源代码。
  • 抽象化是开闭原则的关键,为实现开闭原则,C++提供了抽象类、多态等方法。
3.里氏替换原则
  • 所有使用基类的地方必须能够透明的使用其子类对象。
  • 一个软件将一个基类替换成子类对象,程序将不会产生任何的错误,反之则不####成立。
  • 里氏替换原则是实现开闭原则的重要方式之一。
4.依赖倒置
  • 抽象不应该依赖于细节,细节应当依赖于抽象。要针对接口编程,而不是针对于实现编程。
  • 实现依赖倒置原则,我们应该针对抽象层编程,而将通过依赖注入的方法,注入到其他对象中。一般是通过抽象来注入所依赖的对象。
5.接口隔离
  • 使用多个专门的接口,而不是使用单一的接口,客户端不应该依赖那些它不需要的接口。
  • 一个接口相当于一个单独的角色,不该干的事情不要干,该干的事情必须干。
  • 客户端应该将不需要的接口隐藏起来,如C++中的封装。不应该强迫用户使用那些他们不用的方法。
6.迪米特法则
  • 一个软件实体应该尽可能少的与其他实体发生相互作用。
  • 迪米特法则要求尽可能的降低系统的耦合度,使得类与类的之间保持松散的耦合关系。
  • 减少两个对象的直接作用,可以通过引用一个第三者来降低现有对象的耦合度。
7.总结
  • 单一职责讲的是写一个类与函数注意的点。
  • 开闭原则与里氏替换原则,要求程序应该面向对象。
  • 依赖倒住是面向对象的实现方法。
  • 接口隔离强调封装的重要性。
  • 迪米特法则要求类的设计应当尽量的松耦合,减少对象之间的交互。

常用设计模式

1.单例模式

参考链接

  • 关键点有四个
  • 1.将构造函数设置为私有。
  • 2.声明一个静态单例对象。
  • 3.构造单例对象之前需要加锁。(必须锁柱对象,而非类型)
  • 4.当前同时发生两次检测单例是否为空时,分别应该在锁之前与锁之后。(避免构造多个实例)
  • 单例模式分为懒汉式和饿汉式。懒汉式是使用的时候进行创建。饿汉式直接创建静态实体,用的时候直接返回。
    懒汉式
    在这里插入图片描述
    饿汉式
    在这里插入图片描述
2.工厂模式

参考1
参考2

  • 核心功能:根据需求生产产品。
  • 核心思想:解耦需求、工厂和产品。
  • 一般分为简单工厂、工厂和抽象工厂。

简单工厂

  • 通过switch…case判断语句等操作来解析需求,没有做到工厂与产品的解耦和。、
  • 优点:初步实现简单。
  • 简单工厂中不同的产品都在同一个工厂进行胜场,随着产品增多,会多次去修改工厂里边 的代码。无法做到开闭原则,也不满足迪米特法则。
int prodNo;
class IProduct
{
    public:
    SimpleFactroy(int proNo)
    {
        this.prodNo=prodNo;
    }
    IProduct GetProduct()
    {
        switch(prodNo)
            {
                case 1:
                    return new ProductA();
                case 2:
                    return new ProductB();
                default:
                    return new ProductC();
            }
    }
}
//产品A
class ProductA: IProduct
{
//属性   ...
}

普通工厂

  • 普通工厂将每个产品都写一个工厂,所有的产品派生于一个抽象的产品。
  • 优点:让实现方法更加的面向对象。
  • 缺点:是每增加一种产品就需要同时增加一个工厂类。当需求发生变化的时候只需要增删相应的类,不需要修改已经有的类。
interface  IFactroy  //工厂接口
{
    IProduct GetProduct();
}
//A工厂类
 class FactroyA:IFactroy
{
    IProduct productA;
    public:
        FactroyA()
        {
            this.productA=new ProductA();
        }
        IProduct GetProduct()
        {
            return this.productA;    //A工厂生产A产品
        }
}
...B同理          //B工厂生产B产品

//产品A
class ProductA: IProduct
{
//属性...
}
...其他产品

抽象工厂

  • 一个抽象工厂派生出不同的具体工厂,一个抽象产品派生不同的具体产品,每个工厂生产自己的产品族。
  • 优点:工厂和产品都是面向对象编程了。
  • 缺点:每次拓展新的产品类,需要修改所有的工厂以及抽象工厂的接口。

总结

  • 为了适应程序的扩展性,简单工厂就衍生了普通工厂、抽象工厂等模式。每种模式有每种模式的优点,需要根据实际情况来进行选择。
3.观察者模式
  • 在实际的开发中,出现一对多的依赖关系时,比如:一个守卫(观察者)看管多个囚犯。最简单的方法就是将这些对象绑定在一起,但是这样会造成程序耦合度较高。
  • 主要实现是:将被观察者对象本身传给观察者,通过遍历的方式更新被观察者的状态。
指纹浏览器 WebGPU:新一代图形指纹的检测趋势与提前防御 指纹浏览器与风控系统对抗已升级至硬件层面。传统基于WebGL的API拦截和像素噪声技术,在WebGPU时代因架构变革而失效。WebGPU通过Compute Shader直接测量GPU物理算力,暴露了软件模拟的致命缺陷。防御需转向真实GPU硬件直通和虚拟化技术,如vGPU分割算力并伪装特征,以应对风控系统对硬件拓扑和浮点精度的检测。唯有基于物理算力的拟态,才能抵御新一代图形指纹的降维打击。 阅读详情

相关推荐

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 940

C++设计模式之二(设计模式六大原则)

精彩博客:https://www.cnblogs.com/dolphin0520/p/3919839.html 补充一下面对对象设计八大原则:前五大原则与设计模式的前五大原则相同,为: 1、单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。 2、开...

左霖风的博客 2380

FPGA实现PI控制

FPGA实现PI控制

m0_57319166的博客 3897

设计模式六大原则

虽然可以避免和非直接的类通信,但是要通信,必然会通过一个”中介“来发生联系,过分的使用迪米特原则,会产生大量的中介和传递类,导致系统复杂度变高。(目的:增强程序的健壮性)实际项目中,每个子类对应不同的业务含义,使父类作为参数,传递不同的子类完成不同的业务逻辑。1)接口的设计粒度越小,系统越灵活,但是灵活的同时结构复杂性提高,开发难度也会变大,维护性降低。4)当子类的方法实现父类的抽象方法时,方法的后置条件(返回值)要比父类更严格。3)当子类的方法重载父类的方法时,方法的前置条件(形参)要比父类方法更宽松;

追梦的鱼儿 583

【DMA】认识 DMA 及其工作流程(与传统CPU存取方式的区别)

【DMA】认识 DMA 及其工作流程(与传统CPU存取方式的区别)

challenglistic的博客 5万+

NPP/VIIRS夜间灯光数据下载和介绍

夜间灯光数据作为当前比较火热的研究数据,与其他遥感数据不同,它是通过DN值来体现所携带的信息,最常用的使用月度数据。 该数据数据量大,下载慢,相对来说较难快速获取。 一、数据下载 美国国家海洋大气管理局NOAA下属的NCEI国家环境信息中心Earth Observation Group。 二、月度数据文件介绍 从网站上下载的逐月的灯光数据文件是压缩包的形式,每月的数据包括vcm, vcmsl两个版本的压缩包,其中vcm版本排除了受杂散光影响的数据,vcmsl版本为辐射值经过杂散光校正程序后的数

端木宛白的博客家园 7376

设计模式之美

c++设计模式

心愿许得无限大 3198

TJA1445/TJA1465 CAN收发器硬件设计与软件配置实战指南

控制器局域网(CAN)总线是汽车电子和工业控制领域实现电子控制单元(ECU)间可靠通信的核心技术。其工作原理是将数字信号转换为差分信号进行抗干扰传输,技术价值在于构建稳定、高效的分布式实时控制系统。随着汽车电子架构向域集中式演进,对CAN总线的通信速率、网络复杂度和静态功耗提出了更高要求,这催生了支持CAN FD协议和智能电源管理的新一代高速CAN收发器。在车载网关、域控制器及工业网络节点等应用场景中,NXP的TJA1445和TJA1465系列收发器凭借其部分组网(Partial Networking)和选

weixin_29655587的博客 410

大话设计模式——六大原则(SOLID)

S:单一职责原则(Single responsibility principle) 解释:它规定一个类应该只有一个发生变化的原因。单一职责原则是最简单的面对对象设计原则,它用于控制类的粒度大小。在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分

等一杯咖啡的博客 2232

DAGGER vs 传统模仿学习:为什么数据聚合能提升模型性能?

本文深入对比了DAGGER与传统模仿学习,揭示了传统方法因“分布不匹配”导致性能下降的根源。DAGGER通过动态的**数据聚合**机制,在智能体自身策略产生的状态分布上收集专家数据,从根本上解决了误差累积问题,从而显著提升了模型在实际部署中的鲁棒性和性能。

weixin_29170327的博客 234

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 658

设计模式(C++实现)(一)——设计模式总原则及六大原则

设计模式六大原则 总原则:开闭原则(Open Close Principle)。开闭原则就是说对扩展开放,对修改关闭。 1、单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。 2、里氏替换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principl...

huashuolin001的博客 1701

CodeX 登录报错 os error 10013?一键修复 CodeX 无法登录问题(亲测有效)

CodeX 登录时报 os error 10013?本文提供快速修复方案,实测有效,彻底解决登录报错:登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013)的问题💡

XiaoqiangClub的博客 2929

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1882

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

设计模式原则

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

李守宏 6431

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

设计模式六大原则详解

Single-Responsibilitiy Principle(SRP):对一个类而言,应该仅有一个引起它变化的原因。如果存在多于一个动机去改变一个类,那么这个类就具有多于一个的职责,就应该把多余的职责分离出去,再去创建一些类来完成每一个职责。

eyes++的博客 4710

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

设计模式六大原则及常用模式详解

设计模式六大原则 1、单一职责原则(Single Responsibility Principle) 定义 : 应该有且只有一个原因引起类的变化 注意 : 这里的类不光指类,也适用于方法和接口,比如我们常说的一个方法实现一个功能 2、里氏代换原则(Liskov Substitution Principle) 定义 : 只要父类出现的地方子类就一定可以出现,而且替换为子类也不会出现任何异常或错误,使...

小生的博客 1549

设计模式七大原则详解

设计模式的七大原则,主要包括单一职责原则,开闭原则,里氏替换原则,依赖倒转原则,接口隔离原则,迪米特原则,合成/聚合复用原则。详细介绍每种原则和使用Java代码实现

欢迎每一位朋友不吝赐教,无论是宝贵的建议还是中肯的批评,都将是我前进路上不可或缺的灯塔 1698

设计模式的原则和常用的模式

(友情提示:如果对于java的面向对象基础还不熟悉的程序员们可以先看看《Android 内功心法(番外)——写在设计模式前》,面对对象编程基础。这样,回头来看设计模式就更加能够容易理解。)对编程稍稍深入了解一点的工程师来说,设计模式并不陌生。但设计模式的理解和运用每个层次的人有不同深度和广度的理解。若想了解设计模式,那么就要先摸清它的原则和行为模式。 设计模式不针对哪种编程语言,而是针对编程思想。

boolean的博客 3812

DesignPattern - 设计原则与设计模式初探

欢迎关注微信公众号:FSA全栈行动 ???? 一、设计原则 设计模式是站在设计原则的基础之上的,所以在学习设计模式之前,有必要了解一下设计原则 软件设计开发原则 为了让代码有更好的重用性,可读性,可靠性,可维护性 有六大原则,英文首字母拼在一起就是 SOLID(稳定的),所以也称之为 SOLID 原则 1、单一职责原则(Single Responsibility Principle) 一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因 是实现 高内聚、低耦合 的指

GitLqr的博客 350

【设计模式7大原则详解】

设计模式七大原则深度刨析理解

为者常成,行者常至 1027

设计模式七大原则

1、设计模式的目的 ​ 编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 ​ 1) 代码重用性 (即:相同功能的代码,不用多次编写) ​ 2) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解) ​ 3) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) ​ 4) 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响) ​ 5) 使程序呈现高内聚,低耦合的特性 2、设计模式七大原则 ​ 设计模

java123456111的博客 4834

【设计模式】六大原则详解,每个原则提供代码示例

设计模式的六大原则是面向对象设计中的基本准则,它们有助于编写灵活、可维护、可扩展的代码。这六大原则分别是:单一职责原则(Single Responsibility Principle,SRP)、开放封闭原则(Open/Closed Principle,OCP)、里氏替换原则(Liskov Substitution Principle,LSP)、依赖倒置原则(Dependency Inversion Principle,DIP)、接口隔离原则(Interface Segregation Principle)

摸鱼小小虫的博客 1898

详解面向对象设计模式六/七大原则

为什么 是什么 设计模式六大原则 设计模式七大原则 六大设计原则 七大设计原则 单一职责原则 开闭原则 里式替换原则 接口隔离原则 依赖倒置原则 迪米特原则 组合/聚合复用原则 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

Receptive2WE的博客 713

设计模式的六大原则详解与应用

在软件开发过程中,**设计模式**帮助开发者创建更高效、灵活且可维护的代码。设计模式不仅仅是一些常见的解决方案,更是一套抽象思维方式,帮助我们设计出符合软件工程原则的架构。设计模式的基础是六大原则,这些原则指引我们如何设计出高内聚、低耦合的代码结构,减少复杂度,增加系统的扩展性和维护性。 本文将详细介绍设计模式中的**六大设计原则**,包括其核心概念、实际应用场景以及每个原则在软件开发中的重要性。

fudaihb的博客 1223

设计模式DesignPattern【1】

设计模式是对于反复出现的问题的解决方案,是关于如何解决某些问题的指南。它们不是可以插入应用程序中的类、包或库。相反,这些是关于如何在某些情况下解决某些问题的指导方针,是一种思想方面的东西。设计模式是软件设计中常见问题的典型解决方案。它们就像预制的蓝图,你可以对其进行自定义以解决代码中反复出现的设计问题。

2301_80272161的博客 1106
上一篇: 位运算实现加减乘除
下一篇: C++内存分配
陆标
博客等级 码龄9年 100粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值