设计模式概述

设计模式——设计模式概述 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式主要是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。 1.设计模式由来 软件设计模式源自于建筑学。积淀了几千年的建筑学工... 阅读详情

简单工厂模式

工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。

就如同写一个计算器,我们只需要为每个运算符添加指定的处理逻辑,然后再需要时实例化指定的操作符,进行解耦处理,防止在一个运算类中添加过多的代码,造成过耦合


class OperationAdd:Operation

{

....

}

class OperationSub:Operation

{

....

}

....

public class OperationFactorty

{

    public static Operation createOperate(string operate)

    {

        Opertaion oper = null ;

        switch(operate){

            case "+":

                oper=new OperationAddd();

            case "-":

                oper=new OperationSub();

            ......      

        }

    }

}
# 策略模式

**策略模式**:它定义了算法家族,分别封装起来,让他们之间可以互相转换,减少了各种算法类与使用算法类之间的耦合,此模式让算法发生变化,不会影响到使用算法的用户.
此外,策略模式简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口进行单独测试.

![在这里插入图片描述](https://img-blog.csdnimg.cn/ca2e758d416d4211b1cddf6bacc5fd8c.png#pic_center)


```java
//抽象类算法
abstract class Strategy
{
    //算法方法
    public override void  AlgorithmInterface();
}
// 具体算法B
class ConcreteStrategyA:Strategy
{
    //算法B实现方法
    public override void  AlgorithmInterface();

}
class ConcreteStrategyC:Strategy
{
    //算法B实现方法
    public override void  AlgorithmInterface();

}

// Context,用一个ConcreteStrategy来配置,维护对一个Strategy对象的引用
class Context
{
    Strategy strategy;
    // 初始化,传入具体的策略对象
    public Context(Strategy strategy){
        this.strategy=strategy;
    }
    // 上下文接口,根据具体的策略对象,调用相应的算法
    public void ContextInterface()
    {
        strategy. AlgorithmInterface();
    }
}

单一职责原则

单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

如果一个类承担的责任过多,就等于把这些职责耦合在一起,一个职责的变化可能削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,发生变化时,设计会遭受意想不到的破坏。

开放-封闭原则

开放-封闭原则:软件实体(类,模块,函数等等)是可以扩展的,但是不可修改。

无论模块是多么 的封闭,都会存在一些无法对之封闭的目录,既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生变化的种类,然后用抽象隔离那些变化。

在我们编写程序时,假设变化不会发生,当变化发生时,我们就创建抽象来隔离以后发生的同类变化。

依赖倒转原则

依赖倒转:可以说是面向对象设计的标志,用那种语言来编写程序并不重要,如果编写时考虑的如何针对抽象编程而不是针对细节编程,即程序中所有依赖关系都是终止抽象类或接口,那就是面向对象的设计,反之就是过程化的设计。
里氏代换原则:子类必须能够替换掉它们的符类型。

装饰模式

装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

装饰类的核心就是把类的核心职责和装饰功能区分开,而且可以去除相关的类中的重复的装饰逻辑。

代理模式

代理模式为其他对象提供一种代理控制对这个对象访问。

远程代理:也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏对象在于不同地址空间的事实。

虚拟代理:根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真实对象。

安全代理:用来控制真实对象访问时的权限。

智能指引 :指当调用真实的对象,代理处理另外一些事。

【毕设护航】从0构建YOLOv8犬类识别系统,120种犬类精准检测+可视化界面全流程指南 本文介绍了一个基于YOLOv8的120种犬类目标检测与可视化系统毕业设计项目。该项目使用Stanford Dogs数据集,将图像分类任务转化为目标检测任务。主要内容包括:数据预处理(XML标注转换为YOLO格式)、YOLOv8模型训练与测试(包含训练脚本编写和推理实现),以及基于Tkinter的图形界面开发。该项目技术链条完整,涵盖检测、分割等多任务支持,适合作为计算机视觉方向的毕业设计选题,兼具技术深度和展示效果。 阅读详情

相关推荐

用户存续期价值评估CLV(二) BG/NBD Model python模拟

BG/NBD Model …继续 想象每一个客户有两个硬币,一个“Buy Coin"控制客户购买的概率;一个"Die Coin"控制客户流失、不再购买的概率。 前面假设了客户的交易次数服从泊松过程: 在一年中的每个月,客户都以抛硬币的方式来决定是否购买。我们所观察到的购买次数取决与泊松分布的参数 ????。 %matplotlib inline import numpy as np impor...

weixin_43171270的博客 3428

DesignPattern系列__09设计模式概述

设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度。 <> 是经典的书,作者是 Erich Gamma、...

weixin_30508241的博客 106

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

DesignPattern概述

设计模式简单描述,主要用于工作中模式选择和应用参考,文章中的定义和规则均参阅《Head First 设计模式》一书。 希望通过了解学习,达到“在这里采用装饰着模式相当自然”这样一个比较顺其自然的设计方案的设计,同时也本着模式是工具而不是规则,以期达到目标设计要求。 设计模式其实无处不在,特别是在JDK的jar包源码中大量存在,我们只是对其概念不太了解...

weixin_41419401的博客 420

用MSBlock重塑C2f,让你的模型又轻又强(参数量与精度的双重突破)

打开确保模型解析器能识别MSBlock模块。通过将MSBlock集成到YOLOv8的C2f模块中,我们实现了一个“轻量且多尺度感知”的目标检测模型。这个改进不仅在工程上能降低部署成本、提升推理速度,更在科研上提供了“多尺度+动态核”的创新思路——这种思路可以延伸到其他网络(如ResNet、MobileNet)的改进中,帮你在论文中打造独特的研究点。如果你在实现过程中遇到问题,比如代码报错、训练收敛异常,可以先检查模块集成的每一步是否到位,再尝试调整MSBlock的卷积核尺寸、动态权重的计算方式等超参数。

m0_71589036的博客 107

人工蜂鸟算法(AHA)详解:原理、实现与应用

人工蜂鸟算法(AHA)是一种受蜂鸟飞行技能和觅食策略启发的新型元启发式优化算法。该算法模拟蜂鸟的全向飞行、记忆能力和觅食行为,通过引导觅食、领地觅食和迁徙觅食三种策略在解空间高效搜索。AHA将优化问题解类比为食物源,蜂鸟作为搜索代理,利用访问表记录访问信息。算法核心包括三种飞行技能建模(全向、对角线和轴向飞行)以及对应的数学公式实现。Python实现展示了种群初始化、适应度计算和觅食行为模拟等关键步骤。AHA以其高效的全局搜索能力、良好收敛性和鲁棒性,在复杂优化问题中表现优异。

qq_42212808的博客 907

设计模式(Design pattern)概述

设计模式(Design pattern)的总体把握。 设计模式的23种模式

Suyan的博客 602

InVEST模型 | HAbitat quality模块计算生境质量

 本文详细介绍使用InVEST模型中HAbitat quality模块计算生境质量,包含各个参数的含义、所需数据、数据处理以及需要各个参数注意的地方等过程。

地理空间科学的博客 1万+

设计模式(Designpattern) - 概述

设计模式是什么? 设计模式,简单来说就前人编程总结出来的套路 为什么要学习设计模式? 改善系统的设计,增强系统的健壮性、可扩展性,为以后需求修改作铺垫 学习设计模式之前应该知道的基础知识 - 六大原则 ps:原则是死东西,实际的需求才是真的,应该做到尽量遵守原则,但又不要给原则限死 单一职责 定义:不要存在多于一个导致类变更的原因 理解:通俗来说就是一个类只负责一项职责;譬如一个学生类,那么它就...

weixin_30496751的博客 128

Mac版 Android Studio自带模拟器无法联网解决方案

前言 作为一枚安卓开发者,免不了使用模拟器来开发调试(毕竟它比手机方便太多)。但是因为适配需要,我们会更多的使用真机开发调试,那么当模拟器遇到这样那样的问题,我们往往会无从下手,其中最烦的就是网络问题。 我最近图方便,又重新用起了模拟器,但是发现联网失败,用模拟器内置的浏览器也打不开网页,于是百度上一通找,毫无效果,各种说用cmd命令行设置模拟器dns的都没用,显示没有什么dns文件啥的,后来...

陈万洲的专栏 1万+

【NIPS 2022】时序精选论文07|Non-stationary Transformers: 引入非平稳性信息的平稳化序列预测模型(代码解读附源码)

整体代码框架基本上与传统 Transformer 类似,基本上只有在内嵌的注意力机制模块有区别,因此这里只对关键部分进行讲解,代码整体框架可参考 Transformer。非平稳时序很难预测,尤其对模型泛化性影响很大,试想下推理阶段的数据分布变了,模型很难适应这种变化。,比如很早以前的差分就是一种平稳化操作。序列平稳化能增强数据的可预测性,但这时也会带来一个问题,叫。,通过MLP层进行定义,使得参数可学习,以便于更好的融合到注意力网络中。代码中整体注意力的计算方式与原生Transformer类似,

ViolenceTemper的博客 1495

23种设计模式概述

23种设计模式 概念 结构图

qq_25091281的专栏 2万+

Python量化- Black-Litterman 模型

​​​​​​​Black-Litterman 模型由 Fischer Black 和 Robert Litterman 于 1992 年开发,采用贝叶斯方法进行资产配置。该模型通过结合先前的回报估计(可以从多个来源得出)并结合投资者对未来回报的独特预期来优化分配权重。

探索人工智能领域 1030

设计模式(Design pattern)概述

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。       毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。       GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规

青青的专栏--C/C++ OOA/D Design Pattern 1143

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【设计模式精讲】设计模式概述、UML图

课程大纲**设计模式(Design pattern)**是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结在GOF编写的设计模式(可复用面向对象软件的基础)一书中说道: 本书涉及的设计模式并不描述新的或未经证实的设计,我们只收录那些在不同系统中多次使用过的成功设计。大部分设计模式要解决的都是代码的可重用性、可扩展性问题如果说数据结构和算法是教你如何写出高效代码,那设计模式讲的是如何写出可扩展、可读、可维护的高质量代码,所以,它们跟平时的编码会有直接的关系,也会直接影响到你的开发能力。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

设计模式概述 以及 23种设计模式的介绍

设计模式概述(Design pattern): 设计模式:代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可......

数据知道的博客 9万+

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

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

002 设计模式(Design Pattern)——设计模式概述与创建型设计模式

设计模式概述 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代...

诸般世界 229

设计模式——概述

设计模式概述

qq_51114283的博客 239

【黑马程序员】23种设计模式——设计模式概述

设计模式概述"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯夫·亚历山大(Christopher Alexander)在他的著作(建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。

weixin_54533016的博客 523

设计模式的概述

设计模式 设计模式,不是一种新的语言,也不是什么新api,更不是什么新的语法 设计模式,是前辈们,不断总结,不断打磨出的设计方法, 不同设计模式适用于不同的场景 设计模式,公认的有23种设计模式 分别对应23种设计场景. 这些设计模式我们不用怀疑它的功能! 因为这些设计模式是经过长期的实践考验,而留存下来的 千万不要以为有任何一种设计模式,能解决任何问题,每一种设计模式只能用于适用的场景,而不是万能的 设计模式有优点,也有缺点,我们不要为了适用设计模式而设计模式,切记防止"模式滥用"!

weixin_42947972的博客 146

设计模式系列之 模式概述

设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Pri

灯塔的优快云博客 512
上一篇: 框架| 青训营笔记
下一篇: Go语言的主要特征和简介
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5343粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值