2023-12-14 10:52:55
委托认知的三个层次在勇哥看来,委托认知有下面这个层次。保存函数引用,可以做为函数参数认识到这一点的人,看过书,了解基本的使用规则。委托在类和方法中充当桥梁的作用认识到这一点的人,可以正确的使用委托,了解委托的常见使用场景。但是还看不出来他是不是会面向对象程序设计....委托让程序扩展性更好、耦合度更低 、是开闭原则、控制反转等思想的实现手段认识到这个层次的人,不光对委托非常熟悉,而且有丰富的面向对...
2023-12-14 10:27:50
利用多播委托可以消除if或者switch。其原理如下:多播委托类似于交换机的广播。192.168.1.255这个地址在C类私有网络中是一个广播地址。广播地址用于向本地网络中的所有设备发送数据包。
当一个设备向192.168.1.255发送数据包时,该网络中的所有设备都会收到这个数据包。下面代码中的if判断则是在广播的接收端加入了协议判断,只有符合协议的站点进行了回应。源码:using Syste...
2023-12-09 09:33:38
和AI聊了些现在的大语言模型及其它模型的话题,蛮有意思的,这里记录下来大家把玩一下:大语言模型回答问题时,是在现有资料库的内容上通过统计、分检得到的内容,还是说是真正理解了内容然后说的解决答案?前的大语言模型主要是基于Transformer架构和大规模的语料库进行训练,通过预测下一个词的概率来生成文本。它们可以在大量的文本数据中发现模式和规律,并根据这些模式和规律来生成新的文本。回答问题时,大语言...
2023-12-08 16:07:55
勇哥注:想了解异步编程,大家可以从下面这两方面入手:
(1)生活当中异步处理的例子
注意跟异步跟中断处理的区别
(2)编程方面的应用
1。I/O操作
2。UI交互
3。计算密集型任务
4。 并行编程
异步操作主要用于提高应用程序的响应性能和处理能力控制台的一个小例子这个例子让你快速了解C#异步编程中 async,await...
2023-12-08 14:26:42
C# 的多播委托十分有用,可以用于下面的应用:(1)异常处理:可以将多个异常处理方法链接在一起,以便它们可以按顺序处理异常。 当第一个方法抛出异常时,后续的方法仍然会被调用。(2)条件判断:可以使用多播委托来实现条件判断逻辑, 例如根据不同的条件将不同的方法链接在一起,按顺序执行。(3)消息传递:可以将多个消息处理方法链接在一起,以便它们可以按顺序处理接收到的消息。...
2023-12-07 17:12:43
编写一个插件系统需要考虑以下几个方面:插件接口:定义插件系统的接口,即插件需要实现的功能和规范。这包括插件的输入、输出和处理方式等。插件注册:在系统中注册插件的方式和方法。通常可以通过配置文件、代码注入或特定机制进行插件注册。插件加载:在系统启动或需要使用插件时,加载和实例化插件的方式和方法。插件通信:实现插件之间的通信和数据交换,包括插件之间的依赖关系、事件通知等。插件管理:对已加载的插件进行管...
2023-12-07 14:21:49
勇哥注:需求是,一个服务端的进程,通过外部进程传入的字符串,执行对应的运动卡的api。因为不同运动卡的api加上一起,会有数千个if或者case语句进行判断。我们怎么去掉这上千个判断语句呢?下面是使用策略模式实现的效果:因为api原型都是返回值为int,函数参数中的数量是不一样的。勇哥这里按参数数量不同来包装成不同的策略。这样处理后runAPI的几个子类中的case语句还是必须有的。另外,策略模式...
2023-12-07 07:55:52
下面这段代码,会报一个错误:k.Bind<DALInterface>().To<SqlserverUserDAL>().Named("SqlServer");
k.Bind<DALInterface>().To<AccessUserDAL>().Named("Access");
var ord = k....
2023-12-04 11:43:37
适配器模式,代理模式,装饰器模式有什么区别?当你在编写代码时,需要扩展一个类的功能,或者是当前类的接口不能满足需求时,你会选择怎么做?重新编写子类,通过继承加入功能?修改原有类的接口使其符合现有环境?但你会发现这些改动是不完美的,它们并不符合面向对象的「开放-关闭原则」。开放-关闭原则: 对扩展开放,对修改关闭在软件设计模式中有一个更好的答案——包装。今天介绍的四种设计模式都围绕着“包装”展开,那...
2023-12-01 16:08:19
模板方法模式的定义:一个方法定义一个算法的骨架 ,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种行为型模式,当执行某个操作的步骤基本上是固定的是,可以使用模板方法模式。模板方法模式定义了一个算法框架,将一系列具体的操作交给子类中去实现。可以在不改变模板框架算法的情况下,灵活的扩展改变每一步的具体实现。模板方...
2023-12-01 16:04:45
控制反转(Inversion of Control,IoC)并没有成为第24种设计模式,因为它不是一种具体的设计模式,而是一种编程思想或原则。控制反转是一种重要的编程概念,它是很多设计模式的基础和指导原则,包括依赖注入、工厂模式、模板方法模式等。控制反转的核心思想是将程序的控制权从具体的实现类中转移出来,交给一个外部的控制器或容器来管理。这样做的好处是可以降低代码之间的耦合度,提高代码的可扩展性和...
2023-11-30 16:55:04
代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理或占位符,以控制对该对象的访问。代理模式常用于在不影响客户端代码的情况下,对目标对象进行访问控制、增加额外操作或延迟加载等。下面是一个简单的演示:using System;
using System.Collections.Generic;
using System.Linq;
using System.T...
2023-11-30 16:50:05
享元模式(Flyweight Pattern)是一种结构型设计模式,用于在系统中共享大量相似对象,以减少内存占用和提高性能。享元模式通过共享相同或相似的对象,避免了创建过多的对象实例,从而降低了系统的开销。以下是一个使用C#语言实现的享元模式的示例:假设我们有一个图形绘制系统,需要绘制大量的圆形对象。每个圆形对象具有相同的属性和行为,只是位置和大小不同。为了优化性能和减少内存占用,我们可以使用享元...
2023-11-30 16:46:15
外观模式(Facade Pattern)是一种结构型设计模式,它隐藏了系统的复杂性,并向客户端提供了一个简单的接口。外观模式将客户端与系统的内部复杂性隔离,使得客户端只需要与外观对象进行交互,而无需了解系统内部的具体细节。以下是一个使用C#语言实现的外观模式的示例:假设我们有一个复杂的音响系统,包括调音台、CD播放器、收音机等组件。每个组件都有自己的接口和操作方法。对于客户端来说,直接使用这些组件...
2023-11-30 16:41:19
装饰者模式是一种设计模式,用于动态地给一个对象添加一些额外的职责或行为。它允许你在不改变对象自身的基础上,增强其功能。装饰者模式通常用于实现与原有对象具有相同接口的新对象,并在新对象中添加额外的功能。举个例子,假设我们有一个简单的文本处理程序,可以对文本进行加粗、斜体等操作。我们可以使用装饰者模式来动态地为这些操作添加额外的功能,比如记录日志或统计字符数。下面是一个使用C#实现装饰者模式的例子:u...
2023-11-30 16:37:26
组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,
它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,
使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。组合模式一般用来描述整体与部分的关系,它将对象组织到树形结构中,顶层的节点被称为根节点,根节点下面可以包含树枝节点和叶子节点,树枝节点下面又可以包含树枝...
2023-11-30 16:25:24
类图:桥梁模式所涉及的角色有:抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。修正抽象化(RefinedAbstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现...
2023-11-30 14:12:07
作者:清泓y链接:https://www.zhihu.com/question/573785160/answer/3111113516来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。这个适配器模式,正如字面意思,就是要去适配某一件物品。 假如你正在开发一款股票市场监测程序, 它会从不同来源下载 XML 格式的股票数据, 然后向用户呈现出美观的图表。开发过程...
2023-11-28 17:30:06
在软件工程领域,设计模式是一套通用的可复用的解决方案,用来解决在软件设计过程中产生的通用问题。它不是一个可以直接转换成源代码的设计,只是一套在软件系统设计过程中程序员应该遵循的最佳实践准则。从定义可以看出,设计模式是一套语言无关的最佳设计实践准则,而不是什么真理定理,本文主要罗列GOF的面向对象的23种设计模式。分类设计模式按照其要解决的问题被分为3类:创建型(creational)顾名思义,主要...
2023-11-28 14:34:49
勇哥注:策略模式和状态模式是两个亲兄弟,类图很像。策略模式是封装了一系列算法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同。就像是同样是亿万富豪,马云是靠卖东西,王思聪是靠继承。状态模式的每种状态做的事,可以完全不同。按类图编写的代码:using System;
using System.Collections.Generic;
using System.Linq;
usin...
2023-11-27 17:09:06
勇哥注:状态模式(State Pattern)最简单的理解就可以用来消灭那种很长的if else,或者case。官方说法是:当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类红绿灯就很像是一个状态模式,红灯之后是绿灯,绿灯之后是黄灯,黄灯之后是红灯,这就很符合状态模式的一个逻辑。引用《大话设计模式》的说法:状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。...
2023-11-24 11:38:14
勇哥注:在类图中,最难区分的关系是依赖和关联,在网上一些文章中,这两种关系往往乱画。勇哥自己也容易搞混淆它们,所以在这里写个总结贴子。在UML类图中,依赖(Dependency)和关联(Association)是两个重要的关系概念。它们描述了类与类之间的不同连接方式。让我们来详细讲解一下它们的含义以及在C#代码上的区别。1。依赖(Dependency)依赖是一种较弱的关系,它表示一个类使用另一个类...
2023-11-23 15:38:13
作者:鹅厂程序小哥链接:https://zhuanlan.zhihu.com/p/346510457来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。抽象工厂模式(Abstract Factory Pattern)【使用频率:★★★★★】1. 概述封装出一个接口,这个接口负责创建一系列互相关联的对象,但用户在使用接口时不需要指定对象所在的具体的类。 抽象工厂模式为一个...
2023-11-23 14:19:55
先来段起始源码:需求是: 使用SQLServer数据库,对表User进行Insert和GetUser两个操作using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplic...
2023-11-23 10:22:17
文心一言的介绍能说明问题,引用如下:简单工厂模式和工厂方法模式的主要区别如下:
结构上的区别:
在简单工厂模式中,通常只有一个工厂类来负责所有产品的创建。
而在工厂方法模式中,有一个抽象的工厂接口或抽象类,
多个具体的工厂类继承或实现这个接口或抽象类,每个具体的工厂类负责创建一种产品。
对扩展的支持:
简单工厂模式在增加新产品时需要修改工厂类的代码,这违反了开闭原则。
而工厂...
2023-11-16 14:27:25
勇哥注:此贴为转载,转载地址不详,对作者抱歉。此贴尾,勇哥写了带有C#代码的读书笔记。面向对象设计原则之开闭原则 开闭原则的定义是:软件实体应当对扩展开放,对修改关闭。我们通过例子来了解这个设计原则: 假如现在我们有一个Duck超类,它有嘎嘎叫、戏水、外观等方法。当有外观颜色不同的鸭子时,都可以继承Duck类,然后再覆盖继承得到的外观方法即可。这样就实现了代码复用。现在有个新的需求,要求让所有的鸭...
2023-11-16 10:33:47
勇哥注:此为转贴,载于:https://zhuanlan.zhihu.com/p/133872816 这个某位软件经理的项目实践,放这里让诸君共勉。控制反转和依赖反转是软件框架里面常见的设计方法,说起来容易,但使用起来很难,其根本原因在于场景的难识别。本文根据实际项目中的落地经验来谈一谈控制反转和依赖反转的相关技术。重构背景去年10月上旬,公司正式立项智能售货机(地铁站卖水的自助售卖机)项目,我被...
2023-11-15 13:57:52
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解、灵活和可维护。这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原则的子集,在他2000年的论文《设计原则与设计模式》中首次提出。SOLID 原则包含:S:单一职责原则(single-responsibility principle)一个类或者模块只负责完成一个职责...
2023-11-15 13:40:45
勇哥注:此文章为引用。勇哥在这里只是编写了C#的演示代码,供大家玩读。最近技术组同事分享了关于 JavaScript 时间循环和任务队列的机制,涉及了异步编程方面的内容,包括定时器、Promise、async/await,于是打算借机会巩固一下这部分知识。随手翻了几篇文章,其中一篇在说到异步编程中回调函数时,提到了 IoC(控制反转)、DI(依赖注入)等设计思想,干脆,把这几个名词弄清楚,于是顺藤...
2023-11-14 19:21:55
勇哥注:如此美食,值得记录一下。^_^牛骨高汤准备牛大骨800克加入清水,浸泡至少半个小时,泡出血水。中途最好换一次水,效果更佳。接下来准备熬汤头所需要的食材。胡萝卜80克;生姜段60;白洋葱80克;西芹段60克;大葱段60克;准备香料白胡椒粒6克;白豆蔻2克;白芷1.5克。洗干净把泡好的牛骨放至炖锅。加入5倍的清水,即4000毫升水。加入上面的蔬菜和香料。大火加盖把水煮开,打开盖子,这样煮15分...