设计模式
文章平均质量分 77
王佑辉
个人笔记,多谢指正,不喜勿喷
展开
-
【软考】设计模式之代理模式
持有一个真实对象的引用,负责代理真实对象,并在真实对象处理前或处理后进行附加操作。1.远程代理(Remote Proxy):为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是同一台主机中的不同程序,也可以是网络上的不同主机。:代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象对目标对象进行封装和控制。5.创建了一个代表其他对象的代理对象,从而可以在不修改原始对象的基础上控制访问和附加操作。:控制对原始对象的访问,用于对象应该有不同的访问权限的时候。原创 2024-09-04 15:50:55 · 1399 阅读 · 0 评论 -
【软考】设计模式之外观模式
由于外观类将客户端与子系统的交互进行了封装,当子系统内部发生变化时,只需要修改外观类即可,而无需修改所有客户端代码,从而提高了系统的可维护性。通过提供一个简单的接口,可以将系统的复杂性内部化,对外提供一个简单的接口,使得使用者更加容易使用。:外观模式为客户端提供了一个简化的、统一的接口,使得客户端无需关心子系统内部的复杂性和实现细节,从而降低了客户端与子系统之间的耦合度。:当系统非常复杂时,外观模式可以隐藏子系统内部的复杂性,使得客户端只需要关注与外观类的交互,而无需了解子系统内部的实现细节。原创 2024-05-20 17:24:48 · 1000 阅读 · 1 评论 -
【软考】设计模式之装饰器模式
当需要给某个对象添加额外的功能,但又不想修改其源代码或结构时,可以使用装饰器模式。例如,在软件开发中,可以使用装饰器模式来扩展类的功能,而无需创建新的子类。:在发送网络请求时,可以使用装饰器模式来添加各种请求处理功能,如超时重试、身份验证、请求签名等。:通过装饰器模式,可以为对象添加缓存功能,以提高系统的性能。:装饰器模式在扩展功能时,不需要修改原有类的代码,符合开闭原则(对扩展开放,对修改关闭)。:通过使用不同的装饰类以及这些装饰类的排列组合,可以实现不同的效果,满足不同的需求。原创 2024-05-19 21:31:37 · 888 阅读 · 0 评论 -
【软考】设计模式之桥接模式
事实上这两个接口可以完全不同。1.图形界面库:图形界面库提供了一组通用的界面元素(如按钮、文本框、下拉菜单等),同时也提供了多种不同的绘制方式(如窗口系统的绘制、OpenGL的绘制等)。4.游戏开发中的人物角色:在游戏开发中,人物角色通常具有多种不同的属性和技能(如力量、敏捷、法力等)。是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。:由于抽象和实现之间的分离,桥接模式可以提高代码的可重用性。例如,当需要实现不同的具体实现时,只需要更改实现部分,而无需修改抽象部分。原创 2024-05-14 17:38:55 · 1167 阅读 · 0 评论 -
【软考】设计模式之组合模式
(可选)在递归结构中定义一个接口,用于访问一个父组件,并在合适的情况下实现它。例如,遍历文件夹进行文件类型、数量、大小的统计时,文件夹内可能包含子文件夹(容器文件),也可能只有具体格式的文件(叶子文件)。1.它简化了客户端代码,使得客户端可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象还是组合对象。2.它更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,这符合“开闭原则”。5.希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。原创 2024-05-14 14:54:06 · 428 阅读 · 0 评论 -
【软考】设计模式之观察者模式
3.原创 2024-05-13 16:38:59 · 672 阅读 · 0 评论 -
【软考】设计模式之适配器模式
3.封装有缺陷的接口设计:如果某个类的接口设计存在缺陷或不符合标准规范,可以使用适配器模式进行封装,使其更符合客户端的使用习惯或需求。2.多个类的接口统一:当系统中的多个类的接口不统一时,可以使用适配器模式将它们的接口统一成一个接口,从而提高系统的灵活性和可扩展性。1.旧接口适配新接口:当系统中的一个类需要使用另一个类的接口,但这两个类的接口不兼容时,可以使用适配器模式。2.想创建一个可以服用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。原创 2024-04-22 11:16:24 · 1205 阅读 · 1 评论 -
【软考】设计模式之享元模式
如果不存在,就创建一个新的具体享元对象。享元工厂通常提供一个存储享元对象的享元池,用于缓存已经创建的享元对象。抽象享元角色规定了享元对象的统一接口,使得客户端可以透明地使用具体享元对象。1.享元模式的结构主要包含一下三个角色:抽象享元(Flyweight)角色、具体享元(Concrete Flyweight)角色和享元工厂(Flyweight Factory)角色。2.需要对某一对象结构的对象进行很多不同的并且不相关的操作,而需要避免让这些操作污染这些对象的类,也不希望在新增操作时修改这些类。原创 2024-03-04 21:00:49 · 732 阅读 · 0 评论 -
【软考】设计模式之访问者模式
2.定义访问具体元素的方法checkout,为每个具体元素类声明一个结账的方法,结账操作的参数类型标识了被访问的具体元素为毛巾、饼干和酸奶等。2.抽象访问者(Visitor):定义访问具体元素的接口,为每个具体元素类声明一个Visit操作,该操作的参数类型标识了被访问的具体元素。2.定义访问具体元素的方法feed,为每个具体元素类声明一个喂养的方法,喂狗和喂猫,喂养操作的参数类型标识了被访问的具体元素为狗和猫。1.包含抽象元素的容器,提供让访问者对象遍历容器中所有元素的方法(List、Set、Map等)原创 2024-03-02 18:14:23 · 1434 阅读 · 0 评论 -
【设计模式】模板方法模式
1.在父类定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。原创 2023-11-27 14:01:39 · 491 阅读 · 0 评论 -
【设计模式】装饰者模式
1.在不改变现有对象结构的情况下,动态给该对象添加额外功能的模式2.类B继承于类A,并将类A作为B类的属性(B类聚合A类)3.BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter都用到了装饰者模式。原创 2023-08-30 15:33:03 · 726 阅读 · 0 评论 -
【设计模式】策略模式
1.该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户2.策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。原创 2023-05-06 22:23:41 · 677 阅读 · 0 评论 -
【设计模式】工厂模式
把对象的创建和业务逻辑层分开,避免修改客户端代码,如果要实现新产品可以直接修改工厂类,而不需要在原代码中修改,降低了客户端代码修改的可能性,更容易扩展。5.抽象工厂模式是工厂方法模式的升级版,工厂方法模式只生产一个等级的产品,抽象工厂模式可生产多个等级的产品。7.抽象工厂:提供创建产品的接口,包含多个创建产品的方法,可以创建多个不同等级的产品。5.抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。9.抽象产品:定义产品规范,描述产品主要特征和功能,抽象工厂模式有多个抽象产品。原创 2023-04-23 22:18:57 · 824 阅读 · 0 评论 -
【设计模式】软件设计原则
2.组合或聚合可以将已有对象A作为对象B的成员属性,这样对象B可以调用对象A的功能,维持了类的封装性,对象A功能的内部细节B是看不到的,黑箱复用,可以在对象B中声明A的抽象,降低对象间的耦合度,对象B可以动态引用抽象的具体实现,在运行时才知道具体的实现,灵活度高。B类和A类的耦合度高,A类的实现改变了都会导致子类实现的变化,不利于扩展和维护。6.对于长方形,如果宽小于长,则宽+1,直到宽大于等于长,但同样的方法,对于正方形,宽+1后,长也会+1,这样一直会循环下去,所以正方形重写长方形的方法后运行会出错。原创 2023-04-05 14:43:08 · 465 阅读 · 0 评论 -
【spring】jdk动态代理和cglib动态代理的区别
6.性能上:在老版的jdk,jdk代理生成的类速度快,通过反射调用慢,cglib是jdk代理速度的10倍左右,jdk在版本每次升级都会有很大的性能提升,cglib停滞不前,jdk7 8的动态代理性能在1万次实验中比cglib要快20%左右。5.jdk动态代理如果目标类未实现接口则无法代理,cglib是通过继承的方式来动态代理,若目标类被final关键字修饰,则无法使用cglib做动态代理。1.jdk动态代理只提供实现接口的目标类代理,不支持没有实现接口的目标类的代理。3.从限制角度讨论区别。原创 2023-03-19 20:07:58 · 3842 阅读 · 2 评论 -
【面试】单例的实现方式
单例的实现方式原创 2023-02-19 21:29:45 · 69 阅读 · 0 评论