![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 89
dearfulan
这个作者很懒,什么都没留下…
展开
-
【设计模式】访问者模式
简单来说,访问者模式就是封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。数据结构稳定,但是作用于数据结构的操作经常变化需要数据结构与数据操作分离需要对不同数据类型(元素)进行操作,但是有不使用判断具体类型使得数据结构和作用于结构上的操作解耦,使得操作集合可以独立变化。扩展性好,添加新的操作或者说访问者会非常容易。增加新的元素类型会非常困难,每次新增元素类型,则访问者类必须增加对应元素类型的操作。原创 2023-03-12 23:10:16 · 859 阅读 · 1 评论 -
【设计模式】状态模式
*优点 **结构清晰,状态模式将与特定状态相关的行为封装到一个状态类中,并将不同状态的行为分割开来,满足“单一职责原则”,状态类职责明确,有利于扩展新的状态和转换关系缺点状态模式的使用必然会增加系统的类与对象的个数。状态模式对开闭原则的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源码,否则无法切换到新增状态,而且修改某个状态类的行为也需要修改对应类的代码。原创 2023-03-12 16:21:46 · 489 阅读 · 0 评论 -
【设计模式】命令模式和解释器模式
优点降低耦合 : 通过引入中间件(命令抽象接口), 将请求发起者与请求的接收者进行解耦;扩展性高 : 如果要扩展新命令 , 直接定义新的命令对象即可缺点增加复杂度 : 扩展命令会导致类的数量增加 , 增加了系统的复杂度需要针对每个命令 开发一个与之对应的命令类优点扩展性强,可以很方便的扩展语法缺点实际利用场景比较少语法规则复杂时,会引起类膨胀,增加系统维护难度。原创 2023-03-11 22:41:51 · 441 阅读 · 0 评论 -
【设计模式】备忘录模式和迭代器模式
在负责人类中可以存储一个或多个备忘录对象,它只负责存储备忘录对象,而不能修改备忘录对象(负责人类只提供备忘录对象的读写接口,不提供备忘录属性的读写接口)。对于⼤对象的备份来说,备份占⽤的存储空间会⽐较⼤,备份和恢复的耗时会⽐较⻓。针对这个问题,不同的业务场景有不同的处理⽅式。在不违背封装原则的前提下,捕获⼀个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态,属于行为型模式。它是一个需要保存状态的类,可以创建一个备忘录/备份,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态。原创 2023-03-11 15:03:09 · 675 阅读 · 0 评论 -
【设计模式】装饰器模式
装饰器模式主要用于解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作⽤是给原始类添加增强功能。除此之外,装饰器模式还有⼀个特点,那就是可以对原始类嵌套使⽤多个装饰器。为了满⾜这个应⽤场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接⼝。原创 2023-03-10 22:13:37 · 660 阅读 · 0 评论 -
【设计模式】模板方法模式和门面模式
经典的例子就是app和服务端的交互,app有一个复杂模块,需要从三个系统获取对应的数据来组装,如果app之间和三个系统交互,就要进行三次网络传输,增加一个中间层,将三个系统的接口进行整合封装,对外提供一个接口给app调用,那么就能明显提高性能。模板模式十分简单,我们用其实现一个去银行办理业务的例子,无论你去银行办理什么业务,都需要经过: 取号,排队,办理业务几个步骤 ,这里还增加了一个钩子方法,对于某些特殊的情形,可以增加额外的处理步骤。门⾯模式为⼦系统提供⼀组统⼀的接⼝,定义⼀组⾼层接⼝让⼦系统更易⽤。原创 2023-03-10 21:15:23 · 645 阅读 · 0 评论 -
【设计模式】享元模式和委派模式
享元模式中的“复⽤”可以理解为“共享使⽤”,在整个⽣命周期中,都是被所有使⽤者共享的,主要⽬的是节省空间。第三方的代码不需要知道A的存在,也不需要和A发生直接的联系,通过B就可以直接使用A的功能,这样既能够使用到A的各种功能,又能够很好的将A保护起来,一举两得。Integer.valueOf的源码中对数字大小做了个判断,如果是在[-128,127]的范围内,其值是从缓存中获取的, 因为这个范围的数字的使用频率是最高的,所以jdk使用了享元模式来共享数据,提高性能。看,它们是完全不同的。原创 2023-03-10 17:40:40 · 681 阅读 · 0 评论 -
【设计模式】适配器模式和桥接模式
通过适配器模式,客户端可以使用统一的一套接口,这样实现起来更简洁明了复用了现有的类和代码,减少代码的改动量一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展系统不希望使用继承或因为多层次继承导致类的个数急剧增加需要在抽象和具体实现之间增加更多的灵活性。原创 2023-03-09 22:02:53 · 610 阅读 · 0 评论 -
【设计模式】工厂模式
简单工厂:专门定义一个类(Factory)来负责创建其它类的实例,被创建的实例通常都具有共同的父类或实现同一个接口。工厂(方法)模式:定义一个用于创建对象的接口(工厂接口IConfigParserFactory),让子类或实现去决定实例化哪个类。抽象工厂模式:提供接口给客户端用以创建一系列相关或者相互依赖的对象(往往会有一个可以创建多个产品等级结构的产品的工厂)原创 2023-03-08 22:21:58 · 598 阅读 · 0 评论 -
【设计模式】策略模式和责任链模式
责任链模式就是将请求沿着处理链进行发送,每个链节点收到请求后,都可以对请求进行处理或者将其传递给链上的下一个节点。实际使用责任链的时候,一个请求既可以在被任一节点处理后直接结束,也可以走完整个链路再结束,具体视使用场景决定。策略模式将算法的实现分别封装起来,让他们之间可以方便的进行替换,而不需要去改动代码。举个例子:拼多多现在有促销活动,其优惠策略可能是拼团活动价格,优惠券抵扣,补贴价格,购物返现等…现在有一个db的操作,需要经过组长,领导,DBA的三重审批才可以执行,使用责任链代码实现如下。原创 2023-03-03 22:40:56 · 707 阅读 · 0 评论 -
【设计模式】代理模式
CGLib动态代理继承了被代理的类;JDK动态代理实现了被代理类的接口JDK动态代理和CGLib动态代理都是在运行时生成字节码文件,JDK动态代理直接写Class字节码,CGLib是用过ASM框架写字节码,CGLib生成代理类字节码文件的效率更低CGLib使用了FastClass机制来调用方法,比通过反射调用的JDK动态代理的执行效率更高。原创 2023-03-03 13:22:43 · 376 阅读 · 0 评论 -
【设计模式】原型模式与建造者模式
深克隆浅克隆,建造者模式原创 2023-03-01 17:29:47 · 313 阅读 · 0 评论 -
【设计模式】单例模式
单例模式原创 2023-02-28 23:33:40 · 103 阅读 · 0 评论 -
【设计模式】组合模式
设计模式---组合模式什么是组合模式:Composite?使用场景代码示例组合模式模板什么是组合模式:Composite?计算机的文件系统中,一个文件夹中既可以放入文件也可以放入其他文件夹(子文件夹),所以文件夹和文件虽然是不同类型的对象,但它们都是可以被放入到文件夹中,可以统称为"目录条目"(directory entry)在目录条目中,我们把文件夹和文件当作同一对象看待。对于这种将容器...原创 2019-10-15 20:31:23 · 299 阅读 · 1 评论