![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c#设计模式
c#上位机
硕士,高级软件工程师,精通c#上位机开发,《C#串口通信从入门到精通》,《C# Modbus通信从入门到精通》,《winform控件从入门到精通》专栏作者,持续专注上位机软件开发,立志成为上位机软件开发领域领路人!
展开
-
c#设计模式—单例模式
1、为什么要用单例模式?对于一个系统中的某些类而言,只有一个实例非常重要,比如windows系统只有一个任务管理器窗口,如果有多个任务管理器,情况一是多个任务管理器显示的内容一致,这就浪费了资源,因为每一个实例都要占用内存,情况二是多个任务管理器显示的内容不一致,这会让用户不知道哪个才是系统真正想要表达的转态,基于以上原因,我们可以得出使用一个实例的两大原因:1)使用一个实例,避免了系统因创建...原创 2020-04-08 15:29:43 · 258 阅读 · 1 评论 -
设计模式—简单工厂模式
1、为什么要用简单工厂模式?简单工厂模式是创建型模式,创建型的模式是用来将对象的创建和对象的使用分离,让客户端在使用对象时无需关心对象的创建细节,从而降低了系统的耦合度,让设计方案易于更改和扩展。在设计简单工厂模式时,一方面不能将所有的产品对象都放在一个类中,这样会显得非常乱,另一方面也不能只是单纯的将各个类分离开来,然后新建各个单独的类,那么一定有一些共同的模块在各个类中重复的定义,必然会造...原创 2020-04-09 14:47:45 · 247 阅读 · 2 评论 -
C#设计模式—工厂方法模式
1、为什么使用工厂方法模式?在上一篇博文,简单工厂模式中,当我们要增加一个具体产品类的时候,我们还需要更改工厂类的源代码,不符合开闭原则(对更改关闭对扩展开放),所以使用工厂方法模式的目的是当我们要增加一个具体产品类时不需要更改工厂类而是对工厂类进行扩展,这样就符合了开闭原则,代码如下: abstract class Product { public abstract ...原创 2020-04-10 14:38:45 · 163 阅读 · 2 评论 -
C#设计模式—抽象工厂模式
1、为什么要用抽象工厂模式?工厂方法模式解决了简单工厂模式单一工厂类职责过重的问题,但是工厂方法只提供了生产一种产品的方法,但有时我们需要一个工厂要生产很多种产品,我们按照工厂方法模式的话就会给系统增加了很多类,因此我们可以将一系列的产品放到一个工厂中,称之为产品族,比如都是某一品牌的家用电器,电冰箱,电视机,空调,产品的功能不同;那么对于不同品牌的某一种功能相同的家电,我们可以称之为产品等级结...原创 2020-04-10 21:20:07 · 211 阅读 · 2 评论 -
c#设计模式—建造者模式
1、为什么要使用建造者模式?抽象工厂模式中可以生产一系列相关的产品,我们利用抽象工厂类获取了很多个对象,但是当我们想生产一个由多个部分组成的复杂对象时,也就是说我们只获取一个产品对象,但是这个产品如何构造的客户端不需要知道,这种情况下就需要使用建造者模式,建造者模式中,抽象建造者类定义生产产品各个部分的方法,具体建造者类负责实现,指挥者类负责定义生产各个部分的顺序,代码如下:产品类定义了生产这...原创 2020-04-11 20:44:57 · 165 阅读 · 2 评论 -
c#设计模式—原型模式
1、为什么要用原型模式?我们可以通过工厂方法模式去new一个对象,但是这个对象的状态是初始的转态,如果我们在开发中需要对象当时的状态,并且需要拷贝它的副本,而不是直接对原对象进行操作,这个时候工厂方法模式就失效了,这时有一种新的模式叫原型模式,它的作用就是拷贝一个对象,并且这个对象和原来的对象的状态一致,这样就满足了我们的要求,原型模式中有两种克隆方法,一种叫深克隆,一种叫浅克隆,区别在于复制原...原创 2020-04-15 00:13:03 · 296 阅读 · 2 评论 -
c#设计模式—适配器模式
1、为什么要用适配器模式?假设有一个目标抽象类,其中定义了某个客户想要使用的方法(只是定义,没有实现);这时候有另一个类,我们称之为适配者类,其中包含了一些具体的已经实现的方法;由于目标抽象类中定义的方法名称和客户想要真正调用的方法名称不一样,但是我们为了原有系统的稳定性,不想更改目标抽象类,而且适配者类中方法可能源代码我们都看不到,无法更改,这个时候就需要一个中间类,在这个中间类中去实现目标抽...原创 2020-04-16 21:29:51 · 1458 阅读 · 2 评论 -
C#设计模式—桥接模式
1、为什么使用桥接模式?当我们有一个类具有两个或者两个独立变化的维度的时候,我们可以考虑桥接模式,就比如对于一个数据处理的类,我们既要生成各种图表(曲线,柱状图,饼图),又要生成各种报表(.txt,.csv,.xml),如果我们不适用桥接模式,那么我们要实现这几种组合的话就要写对应的3*3=9个类,如果我们使用桥接模式只想要3+3=6个类,明显的减少了类的个数,简化了代码,提高了灵活性。2、怎...原创 2020-04-18 10:38:22 · 364 阅读 · 2 评论 -
c#设计模式—组合模式
1、为什么要用组合模式?当我们面对一个树形结构对象或者说是具备整体——部分的结构的对象时,我们又不想对于整体和部分分开进行处理,而是想用一个方法对整体和部分进行统一处理,举个例子,一个公司有人事部、IT部、财务部,人事部有小A、小B、小C,IT部有小D、小E、小F,财务部有小G,小H,小I,我们想对这三个部门的人的工资进行调整,统一增加1000元,那么我们对于这个具有整体-部分的对象,没有必要对...原创 2020-04-19 22:29:44 · 487 阅读 · 2 评论 -
c#设计模式—装饰模式
1、在遵循开闭原则的基础上,当我们想给一个对象增加功能时,我们可以使用装饰模式的对象的关联关系替代继承关系,因为使用继承关系增加子类将会给系统增加非常多的子类,下面举例说明:我们想开发一个软件界面库,这个库有文本框、标签、窗体对象三种,并且当我们开发完成之后,发现要为这几个对象增加一些功能,比如加上滚动条,加上黑色边框功能,假设我们使用继承,代码如下: abstract class Compo...原创 2020-04-22 21:27:14 · 366 阅读 · 0 评论 -
设计模式—外观模式
1、为什么要用外观模式?当客户端需要和多个对象打交道的时候,这时候业务逻辑会非常复杂,这时候我们引入一个外观类,让这个外观类去和多个对象打交道,客户端只需要调用外观类中的一个方法即可,这样就降低了客户端与子系统的耦合度,降低了原有系统的复杂度,就像如果我们自己去泡茶喝,我要拿杯子,倒开水,选择茶叶,和三个对象打交道;如果我们去茶馆喝茶,服务员直接帮我倒好了茶了,我们只需要和服务员打交道就好了,服...原创 2020-04-26 23:41:05 · 195 阅读 · 2 评论 -
c#设计模式——迭代器模式
迭代器模式用于访问一个类,这个类称为聚合类,因为该类中含有很多个对象,迭代器就指定了访问这个类中对象的方法,比如访问第一个数据,访问下一个数据等,代码如下:1、抽象迭代器类指定了访问聚合类中对象的方法 interface IIterator { void MoveNext(); object GetCurrent(); bool IsFirst(); }2、具体迭代器类具体迭代器类除了实现抽象迭代器中的方法以外,还通过构造函数传入原创 2022-02-19 13:54:58 · 476 阅读 · 0 评论 -
c#设计模式——享元模式
前言:为什么要用享元模式因为当一个系统中含有很多相似的对象时,如果每个对象都要占内存的话,那么对系统的性能是有影响的,此时如果将相似对象的共同部分作为一个共同的对象,不同的部分再通过方法传入不同的参数来实现的话,这样就能节省很多内存,代码如下:1、抽象享元类该类除了定义抽象方法用实现相似对象的共同功能,还要定义一个外部方法用于传入外部参数,从而组成不同的相似对象 abstract class AbstractCom//抽象享元类 { protected abstract v原创 2022-02-20 21:21:16 · 848 阅读 · 0 评论 -
c#设计模式——代理模式
前言:为何要使用代理模式?因为在某些地方需要对某个对象添加一些权限,从而去控制对对象的访问时,这时候又不方便直接对原始对象所在的类进行修改,那么就要建立一个代理类去实现对对象的访问权限的控制,代码如下:1、抽象类 abstract class Abstraction { public abstract void Operation(string name); }2、具体类class Concrete : Abstraction { publ原创 2022-02-21 10:37:58 · 1056 阅读 · 0 评论 -
c#设计模式——解释器模式
前言:解释器模式用于解释某一种语言,比如我们预先规定某一些特定的指令包含了某些复杂的含义,但是我们在运行时,不需要输入这些复杂的含义,只需要输入规定的特定的含义即可,如下:1、抽象类abstract class AbstractionExpression { public abstract string Interpret(); }用于返回解释的具体内容2、终结符表达式用于解释具体的某个指令,在本例子中是方向、运动模式、距离 class TerminalExp原创 2022-03-01 09:30:26 · 444 阅读 · 0 评论 -
c#设计模式——中介者模式
前言:中介者用于解决多个对象有多对多的关系时,使用一个中介者类来处理对象之间的复杂的关系,从而让代码不会显得非常乱,如下:当点击华氏温度升高的时候,摄氏温度升高,并且温度调节按钮也发生变化;同样当调机温度调节的trackbar时,华氏温度的textbox和摄氏温度的textbox的值都要发生变化。1、抽象中介者类 abstract class Mediator { public abstract void ComponentChange(Component原创 2022-03-01 15:34:40 · 1302 阅读 · 0 评论 -
c#设计模式——备忘录模式
前言:备忘录模式用于软件系统中实现撤销功能,如下:1、原发器类该类用于软件系统中存储系统状态的,该类中通过创建一个备忘录对象来存储当前状态,以及使用负责人类中存储的备忘录对象来获取原发器的历史状态public class Origin//原发器 { private string _State;//不让别的类获取到这个状态 /// <summary> /// 把当前状态存到备忘录类中,并获取到备忘录对象,获取到这个对象后需要存入负责人原创 2022-03-09 15:44:23 · 498 阅读 · 0 评论 -
c#设计模式——观察者模式
前言:观察者模式适用于一对一,或者一对多的情况,改变目标的状态可以同时让一个或者多个观察者看到目标的改变状态,然后根据自身情况作出相应的反应 class TempEventArgs:EventArgs { public double Temp { get; set; } public TempEventArgs (double temp) { this.Temp = temp; } } c原创 2022-03-18 08:45:47 · 1597 阅读 · 0 评论 -
c#设计模式——状态模式
前言:状态模式用于解决多个情况下使用多个if else语句让代码显得比较乱的问题,状态模式有环境类,可以控制状态的切换以及不同状态方法的调用;抽象状态类申明不同状态类需要执行的相似的方法,还有不同的具体状态类,如下: class Contex { public State _State, _state1, _state2; public Contex() { _state1 = new State1();原创 2022-03-18 09:56:56 · 1678 阅读 · 0 评论 -
c#设计模式——策略模式
前言:策略模式就是用于实现某个功能但是可以有不同选择的情况,抽象策略类定义抽象方法,具体策略类定义具体方法,环境类维持对抽象策略对象的引用,并且通过注入的方式来注入不同的具体策略对象,然后在环境类中调用具体策略类中的方法 public abstract class VisionAlgorith//抽象策略类 { public abstract void Handle(); } class algorith1 : VisionAlgorith//具体策略类原创 2022-03-18 12:01:05 · 656 阅读 · 0 评论 -
c#设计模式——模板方法模式
前言:模板方法就是使用一个方法,然后这个方法里面有很多个步骤方法,然后步骤方法有的是固定的,有的是可能变化的,步骤方法是变化的就声明成抽象方法,然后具体类去重写步骤方法,如下: public abstract class VisionAlgorith { public void Handle() { Method1(); Method2(); } protected abstrac原创 2022-03-18 13:43:03 · 758 阅读 · 0 评论 -
c#设计模式——访问者模式
前言:访问者模式用于不同的元素有不同的访问者,不同的访问者对于访问不同的元素时要有不同的行为,如下:public interface Element { void Accept(Visitor visitor); } public class Element1 : Element { public void Accept(Visitor visitor) { visitor.Visit(this)原创 2022-03-18 14:48:50 · 488 阅读 · 0 评论