设计模式
文章平均质量分 91
本人学习设计模式的笔记,让人深入了解rust,java的语法和设计模式,让我们充分了解设计模式的高深思想
过去日记
在校大学生,csdn平台优质作者,华为云云享专家,阿里云专家博主,曾获得华为昇腾AI创新大赛优秀奖,黄河鲲鹏省赛银奖,全国大学生电子设计大赛省一等奖,擅长java方面spring boot后端开发,对新兴的go和rust也非常感兴趣
展开
-
桥接模式 rust和java的实现
意图:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。原创 2023-11-15 01:00:00 · 1290 阅读 · 0 评论 -
设计模式概述
它定义了算法家族,分别封装起来,让他们之间可以互相转换,减少了各种算法类与使用算法类之间的耦合,此模式让算法发生变化,不会影响到使用算法的用户.此外,策略模式简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口进行单独测试.原创 2023-09-12 15:34:03 · 246 阅读 · 0 评论 -
备忘录模式 rust和java的实现
意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态。应用实例: 1、打游戏时的存档。2、Windows 里的 ctrl + z。3、浏览器中的后退。4、数据库的事务管理。原创 2023-12-04 08:28:40 · 1817 阅读 · 0 评论 -
命令模式 rust和java实现
意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。何时使用:当需要先将一个函数登记上,然后再以后调用此函数时,就需要使用命令模式,其实这就是回调函数。优点。原创 2023-11-29 10:02:25 · 1462 阅读 · 0 评论 -
组合模式 rust和java的实现
意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。何时使用:、1、您想表示对象的部分-整体层次结构(树形结构)。2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。应用实例。原创 2023-12-03 09:38:17 · 1285 阅读 · 0 评论 -
中介者模式 rust和java的实现
意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。作用:1.通过中介者提供的中转作用,各个同事对象就不再需要显式引用其他同事,当需要和其他同事进行通信时,通过中介者即可。该中转作用属于中介者在结构上的支持。2.中介者可以更进一步的对同事之间的关系进行封装,同事可以一致地和中介者进行交互,而不需要指明中介者需要具体怎么做,中介者根据封装在自身内部的协调逻辑,对同事的请求进行进一步处理,将同事成员之间的关系行为进行分离和封装。原创 2023-12-04 08:29:18 · 1874 阅读 · 0 评论 -
适配器模式 rust和java的实现
意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。关键代码:适配器继承或依赖已有的对象,实现想要的目标接口。原创 2023-11-14 01:00:00 · 1782 阅读 · 0 评论 -
过滤器模式 rust和java的实现
我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。我们制作一个Person实体类,Criteria为标准条件,CriteriaMale等为实现的具体判断器,是需要为person类使用meetCriteria方法便可以进行不同条件的判断。我们制作一个Person实体类,Criteria为标准条件,CriteriaMale等为实现的具体判断器,是需要为person类使用meetCriteria方法便可以进行不同条件的判断。原创 2023-11-16 01:00:00 · 1646 阅读 · 0 评论 -
原型模式 rust和java的实现
意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。主要解决:在运行期建立和删除原型。何时使用: 1、当一个系统应该独立于它的产品创建,构成和表示时。2、当要实例化的类是在运行时刻指定时,例如,通过动态装载。3、为了避免创建一个与产品类层次平行的工厂类层次时。4、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。如何解决:利用已有的一个原型对象,快速地生成和原型对象一样的实例。关键代码。原创 2023-11-13 01:00:00 · 1390 阅读 · 0 评论 -
建造者模式 rust和java的实现
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。应用实例: 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。原创 2023-11-16 08:34:25 · 1270 阅读 · 0 评论 -
装饰模式 rust和java的实现
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。何时使用:在不想增加很多子类的情况下扩展类。应用实例孙悟空有 72 变,当他变成"庙宇"后,他的根本还是一只猴子,但是他又有了庙宇的功能。不论一幅画有没有画框都可以挂在墙上,但是通常都是有画框的,并且实际上是画框被挂在墙上。在挂在墙上之前,画可以被蒙上玻璃,装到框子里;原创 2023-11-20 00:15:00 · 1302 阅读 · 0 评论 -
单例模式 rust和java的实现
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。原创 2023-11-12 09:00:46 · 1813 阅读 · 0 评论 -
外观模式 rust和java的实现
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。应用实例去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。优点: 1、减少系统相互依赖。2、提高灵活性。3、提高了安全性。缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。原创 2023-12-03 09:38:06 · 1485 阅读 · 0 评论 -
代理模式 rust和java的实现
意图:为其他对象提供一种代理以控制对这个对象的访问。代理模式的主要优点代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可以扩展目标对象的功能;代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;其主要缺点在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;增加了系统的复杂度;应用实例: 1、买火车票不一定在火车站买,也可以去代售点。2、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。原创 2023-11-24 10:08:23 · 693 阅读 · 1 评论 -
工厂模式 rust和java的实现
应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。2、Hibernate 换数据库只需换方言和驱动就可以。优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。3、屏蔽产品的具体实现,调用者只关心产品的接口。缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。原创 2023-11-07 01:00:00 · 354 阅读 · 0 评论 -
享元模式 rust和java的实现
意图:运用共享技术有效地支持大量细粒度的对象。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。何时使用系统中有大量重可复利用的对象。这些对象消耗大量内。对象的创建和销毁较为浪费系统资源。这些对象的状态大部分可以外部化。这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。系统不依赖于这些对象身份,这些对象是不可分辨的。应用实例。原创 2023-11-22 00:15:00 · 1208 阅读 · 0 评论 -
抽象工厂模式 rust和java的实现
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。如何解决:在一个产品族里面,定义多个产品。关键代码:在一个工厂里聚合多个同类产品。应用实例:工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。原创 2023-11-08 01:00:00 · 695 阅读 · 0 评论