设计模式
文章平均质量分 82
茗杨AaronYang
胖乎乎的,但技术还好
展开
-
[AYJS] wpf设计模式学习[22]-解释器模式-Interpreter
官方:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。总结:装载多个解释器。解释器1个入口,就是Context对象,拿到后,解析处理。Console.WriteLine("非终端解释器");Console.WriteLine("终端解释器");这个是模型,真正运用起来,这个模式还是有点难度的。原创 2023-11-17 10:37:38 · 40 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[23]-访问者模式
1、符合单一职责原则:凡是适用访问者模式的场景中,元素类中需要封装在访问者中的操作必定是与元素类本身关系不大且是易变的操作,使用访问者模式一方面符合单一职责原则,另一方面,因为被封装的操作通常来说都是易变的,所以当发生变化时,就可以在不改变元素类本身的前提下,实现对变化部分的扩展。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。这是不符合开放-封闭原则的。如果多了1个新的访问者,只要Accept一个就够了,以前的代码不用任何处理。原创 2023-11-16 11:50:07 · 26 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[21]-享元模式,你一直都在用
3. 在B/S的系统中,个人感觉享元的应用相对较少,Web的无状态,加之我们完全在客户端进行一系列的复杂逻辑,然后将之统一传递给Web服务器端,而不需要享元。AY:其实,在一定意义上,我个人认为单例模式和享元模式的初衷是一样的。他们都是要控制对象的数量,而且实现方式本质上有着一些类似,就是首先查询这个对象是否存在,然后返回这个对象。C# string就是用了享元模式,所以说字符串越多,内存消耗越大了,所以说string少用最好,不然占内存。2. 对象的创建是会消耗大量时间的过程,并且对象占用较大内存。原创 2023-11-16 11:49:44 · 29 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[20]-中介者模式(调停者模式)
你会在程序中增加一个巨大的对象,而你的噩梦就是维护这个对象。中介者里面会包含大量的逻辑,设计较多的节点获取,造成的维护难度也是显而易见的。所以,还是那句话,不要为了模式而模式,这个世界上没有万能的模式,就和没有绝对安全的系统一样。房主和我们普通人是不认识的,我们可以通过中介与房主得到联系, 比如我 要Buy,通过中介,找到合适的卖家,让你可以间接的与卖家联系上了。而代理模式:就是 卖房子和房主 是继承统一接口,两个人一模一样,只是中间做个中转,没有额外处理。你调用中介,等于调用房主的方法。原创 2023-11-16 11:49:15 · 21 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[19]-职责链模式
Console.WriteLine("{0}处理请求{1}", this.GetType().Name, request);讲解:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象能处理请求为止。职责链,每次处理,都设置下一个处理的handler,形成一个链条,最好设置最终的Handler,保证每个都能处理。AY:客户端不管过程,只要结果,后面 各个环节职责怎么触发的,到哪了,最终到哪结束都是不管的。原创 2023-11-16 11:48:54 · 25 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[18]-命令模式-Command
Console.WriteLine("执行命令");场景:下多个命令,然后组合,其中可以撤销命令,通知命令去执行。原创 2023-11-16 11:48:33 · 29 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[17]-桥接模式-Bridge
如果我们的对象依赖于抽象,对于具体的实现并不关心,我们可以通过对象组合,组合出我们想要的对象。我们了解为什么需要桥接模式(Bridge)和如何使用桥接模式(Bridge),由于对象的多维度的变化,使得难以决定变化时,我们可以把对象和变化抽象出来。什么叫抽象与它的实现分离,不是说,让抽象类与其派生类分离,因为没意义。汽车4S店,有1个汽车,也可以开店,2个也行..随便多少,拥有多个汽车,所以是聚合关系。而说1个汽车4个轮子, 轮子是必须的,1个不能少,这就是合成关系。对于具体实现的修改,不会影响到客户端。原创 2023-11-16 11:47:39 · 43 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[16]-单例模式-Singleton
不要将数据库连接做成单例,因为一个系统可能会与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。Singleton模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放,带来问题。使用Singleton模式有一个必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式。反之,如果一个类可以有几个实例共存,就不要使用单例模式。这种方式的简单和性能良好,而且还提供检查是否已经创建实例的属性IsValueCreated。为了保证只有1个对象的实例的,避免创建多个。原创 2023-11-16 11:46:23 · 66 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[13]-备忘录模式
总结:通过一个中间类,备份我们给客户提供搞得类的属性,通过给客户提供的2个额外的方法,备份和还原属性,实现备份的效果。这里Ay直接拿 命令的方式去写,我们经常遇到Ctrl+Z撤销命令,还原到上次,为了让模式更好懂,我就简单写了。Console.WriteLine(CommandName+"开始执行:");Console.WriteLine("还原后,执行上一次的命令");Console.WriteLine("执行了粘贴功能");Console.WriteLine("执行了粘贴功能");原创 2023-11-15 17:08:41 · 22 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[12]-适配器模式以及对比代理模式
其中有个代理,代理中放个你,构造函数把你实例化,代理调用方法,等于中转一下调了你的方法,发货是从你这发的。场景:系统的数据和行为都正确,但是接口不符时,可以考虑适配器模式。你只要想到2个例子: 适配器,比如电源,中国220V,外国110V,中国的电源到外国就不能用了,你就需要个电源适配器了。用来适配电源的电压。Console.WriteLine("适配额外的处理,把窗体适配,能在WPF中显示");而代理,你想一下,假如你卖个东西,你把东西给代理商帮你卖,你们卖的是一样的东西,他销售出去,也等于你卖出去了。原创 2023-11-15 17:08:10 · 45 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[15]-迭代器模式-Foreach
场景:分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明地访问集合内部的数据。Console.WriteLine("=========.NET自带foreach ay====");Console.WriteLine("=========.NET自带 IEnumerator方式 ay====");Console.WriteLine("=========逆向输出====");在.NET中, IEnumerator支持对非泛型集合的简单迭代。原创 2023-11-15 17:10:03 · 55 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[14]-组合模式-Tree模式
理解场景:部门与整体,最终目的一致。比如复制文件,一个一个文件拷贝过去,也可以整体文件夹拷过去。复制文字,单字复制,与多个字选中后一起复制。Console.WriteLine("不能拓展子节点,这是个纯子节点");bk2.Add(new LeafBanKuai("智能家居"));bk2.Add(new LeafBanKuai("酒店点餐"));Console.WriteLine("不能删除子节点");正好最近搞了个论坛,就以论坛为例子,版块和子版块的关系。原创 2023-11-15 17:09:18 · 23 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[11]-状态模式,以及对比策略模式
Console.WriteLine(string.Format("任务{0}:{1} 还未接受任务,请先接受.", TaskId, TaskName));Console.WriteLine(string.Format("任务{0}:{1} 还未接受任务,请先接受.", TaskId, TaskName));Console.WriteLine(string.Format("任务{0}:{1} 还未接受任务,请先接受.", TaskId, TaskName));恭喜", TaskId, TaskName));原创 2023-11-15 17:04:28 · 39 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[10]-观察者模式
当然这里推荐使用abstract类去写,关于在这个DEMO的WPF类,上方还可以再加一个父类,完成模板模式的思想,把 Attach和Detach方法提取出去,子类再继承WPF的子类。Console.WriteLine("ToggleButton类型:" + Name + "控件下的数据已经更新");新建一个控件父类(被Notify对象,Observer,Update对象),和一个 桌面平台技术父类(Notify角色)//界面发生更新后,通知被绑定的控件 ayjs.net。好了,这里不多说了,先到这。原创 2023-11-15 17:02:14 · 88 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[9]-建造者模式Builder
public void Build() { //搭建人员,定义的顺序,不管客户端先实现的哪个方法,这个顺序必须固定。建造者模式跟 外观模式有点类似,但是建造者模式,的组装的权利是在director中的。Console.WriteLine("内容区域中的内容已经渲染");Console.WriteLine("标题栏的内容已经渲染");Console.WriteLine("菜单栏的内容已经渲染");ay解释:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建个Builder。原创 2023-11-15 15:59:14 · 20 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[8]-外观模式Facade
使用者Facade aa=new Facade() 然后调用对外暴露的方法。每个方法中,包含A,B,C,D,E的方法的组合调用,形成流程,步骤,Facde中包含 A,B,C,D,E,然后封装多个对外暴露的方法。讲解:一个Facade类,多个其他类A,B,C,D,E。原创 2023-11-15 15:57:54 · 43 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[7]-模板模式
优点:去除子类重复代码,也可以定义让使用者完成定义的流程。如果使用者没有定义,我们可以考虑虚方法,父类定义默认的 某个步骤的执行。场景和定义:当我们要完成的某个细节或者过程或者步骤,但个别操作可能不同时候,我们可以考虑模板方法。在WPF中,大量使用了模板模式,比如控件开发,那么多继承与封装。原创 2023-11-15 15:56:57 · 15 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[6]-原型模式
解释:从一个对象创建另外一个可定制的对象,无需知道任何创建的细节getreturn id;客户端使用:当然在C#中,System空间下有个ICloneable接口,继承它就有Clone方法了。继承接口就可以实现原型模式了。新建一个类,继承ICloneable类getreturn id;客户端使用,效果一样的。原创 2023-11-15 15:56:04 · 24 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[5]-策略模式
使用场景:是一种定义了一系列算法的方法。是每个算法耦合性降低,方便单元测试。Console.WriteLine("算法A的实现");Console.WriteLine("算法B的实现");Console.WriteLine("算法C的实现");//策略模式 ay 杨洋 ayui。还是拿简单工厂的例子来改,简单工厂是Factory,策略是Context。在WPF中,业务中可能会遇到,但是说在控件开发中,我还没用到。使用方法 www.ayjs.net。接下来,我们跟简单工厂结合。原创 2023-11-15 15:55:08 · 29 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[4]-抽象工厂,简单工厂
然后来个Factory,下面一个static A createA(string aa)下面switch根据aa的值,返回不同的子类。抽象工厂就是把,Factory又提升了一层,抽象出一个IFactory,然后每个Factory返回一个A的子类。Console.WriteLine("努力加载Win10皮肤所需要的控件...");Console.WriteLine("努力加载360皮肤所需要的控件...");Console.WriteLine("努力加载QQ皮肤所需要的控件...");原创 2023-11-15 15:53:41 · 46 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[3]-代理模式
这里有一点要说,真正使用的时候,new KFCBusiness要隐藏起来,直接,骑手 =new 骑手。具体那个实例,在自己的类中,自己接到订单后,自己实例化。2016-5-23 13:26:43 我们就拿2016年最热门的行业,送外卖来举例子吧,我已经最精简代码了,这里最好商家和骑手也抽象出来。Console.WriteLine("KFC的外卖,派送了");场景:为其他对象提供一种代理以控制对这个对象的访问【间接性】这里使用抽象类方式,你也可以使用接口方式。效果输出:KFC的外卖,派送了。原创 2023-11-15 15:52:25 · 29 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[2]-装饰者模式
最顶端 抽象父类 有个公共方法,好比wpf的 OnRender方法,你可以render的时候 添加任何操作,而父类无需知道自己下面有多少个实现了的 OnRender方法。那么接下来,我自己来模拟下WPF的 装饰者的DEMO,让你更加了解下装饰者,增加OnRender方法(比如给水果染色)这些新的代码通常装饰了原有类的核心职责或主要行为。Console.WriteLine("具体的操作对象");Console.WriteLine("对象A的操作");Console.WriteLine("对象B的操作");原创 2023-11-15 15:51:41 · 35 阅读 · 0 评论 -
[AYJS] wpf设计模式学习[1]-简单工厂-搭积木
但事实上我们根本不止三块木头,以后可能还有其他形状的其他颜色的木头,为了方便能有更多的木头,我们需要一个工厂来生产这个木头,说白了,其实是为了我们来拿木头搭建的时候更轻松,方便打下基础,拿木头的时候你就知道了。如果不考虑定死的颜色,我们现在只需要把”方形“改成 我们身边现有的形状,工厂就可以帮你生产出该形状的积木,说生产太那个了,就是创建一个有形状的积木对象给你,然后你掉这个积木的方法就行了,看了3,4个简单工厂的例子,映像最深的还是那个计算器(好像还是微软的一道面试题"计算器,用OOP实现")原创 2023-11-15 15:44:33 · 41 阅读 · 0 评论