
23种设计模式
文章平均质量分 82
设计模式
振鹏Dong
天津理工大学22级软件工程学生董振鹏
展开
-
Mybatis日志模块分析--适配器模式+代理模式
日志在我们开发过程中占据了一个非常重要的地位,是开发和运维管理之间的桥梁,在Java中的日志框架也非常多,Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口也都不尽相同,为了统一这些工具,MyBatis定义了一套统一的日志接口供上层使用。原创 2025-03-29 13:18:32 · 486 阅读 · 0 评论 -
从Java核心去理解单例模式(6种)
从JVM、锁、反射机制等理解不同实现单例的方案!原创 2025-03-23 11:30:21 · 746 阅读 · 0 评论 -
剖析Mybatis中用到的设计模式
框架对很多设计模式的实现,都并非标准的代码实现,都做了比较多的自我改进。实际上,这就是所谓的灵活应用, 只借鉴不照搬, 根据具体问题针对性地去解决。涉及到Mybatis源码知识和设计模式,这点我之前的博客均有涉及。可以查看我的专栏~ 点击上述文字也可以跳转至专栏信息页哦。原创 2025-04-06 17:42:20 · 847 阅读 · 0 评论 -
状态模式~
将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。状态模式的使用必然会增加系统类和对象的个数。状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。状态模式对"开闭原则"的支持并不太好 (添加新的状态类需要修改那些负责状态转换的源代码)。对象根据自身状态的变化来进行不同行为的操作时, 比如,购物订单状态。原创 2025-04-05 13:15:19 · 373 阅读 · 0 评论 -
责任链模式
降低了对象之间的耦合度该模式降低了请求发送者和接收者的耦合度。增强了系统的可扩展性可以根据需要增加新的请求处理类,满足开闭原则。增强了给对象指派职责的灵活性当工作流程发生变化,可以动态地改变链内的成员或者修改它们的次序,也可动态地新增或者删除责任。责任链简化了对象之间的连接一个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。责任分担。原创 2025-04-04 13:56:09 · 236 阅读 · 0 评论 -
策略模式——本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。
策略类之间可以自由切换由于策略类都实现同一个接口,所以使它们之间可以自由切换。易于扩展增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“避免使用多重条件选择语句(if else),充分体现面向对象设计思想。客户端必须知道所有的策略类,并自行决定使用哪一个策略类。策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。策略模式使用场景一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中。原创 2025-04-03 13:05:25 · 1009 阅读 · 0 评论 -
装饰器模式
本文以Mybatis源码中装饰器模式应用为例;对于扩展一个对象的功能,装饰模式比继承更加灵活,不会导致类的个数急剧增加可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为。原创 2025-03-29 12:25:22 · 814 阅读 · 0 评论 -
外观模式(门面模式)
它对客户端屏蔽了子系统组件,减少了客户端所需要处理的对象数目,并使子系统使用起来更加的容易.通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少.它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可一个子系统的修改对其他子系统没有任何影响,而子系统内部变化也不会影响到外观对象.不能很好的控制客户端直接使用子系统类,如果客户端访问子系统类做太多的限制则减少了可变性和灵活性.原创 2025-03-30 16:29:13 · 878 阅读 · 0 评论 -
桥接模式——挺难拆分维度
虽然消息的行为比较统一,主要包括发送、接收、处理和回执,但其实具体客户端的实现通常却各不相同,比如,手机短信、邮件消息、QQ 消息、微信消息等。扩展抽象化(RefinedAbstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。桥接模式要求正确识别出系统中的两个独立变化的维度,因此具有一定的局限性,并且如果正确的进行维度的划分,也需要相当丰富的经验.抽象化(Abstraction)角色 :主要负责定义出该角色的行为 ,并包含一个对实现化对象的引用。原创 2025-03-28 14:16:56 · 362 阅读 · 0 评论 -
享元模式-用好有限资源
比如,使用 Integer.valueOf() 方法时,实际的代码实现中有一个叫 IntegerCache 的静态类,它就是一直缓存了 -127 到 128 范围内的数值,如下代码所示,你可以在 Java JDK 中的 Integer 类的源码中找到这段代码。如果不存在的话,则创建一个新的享元对象。抽象享元角色(Flyweight):通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来设置外部数据(外部状态)。原创 2025-03-31 08:49:04 · 267 阅读 · 0 评论 -
适配器模式——浅入浅出
将类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,来实现,来实现。的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以些。原创 2025-03-30 16:21:03 · 282 阅读 · 0 评论 -
观察者模式
观察者模式的优点降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。被观察者发送通知,所有注册的观察者都会收到信息【可以实现广播机制】观察者模式的缺点如果观察者非常多的话,那么所有的观察者收到被观察者发送的通知会耗时如果被观察者有循环依赖的话,那么被观察者发送通知会使观察者循环调用,会导致系统崩溃3 ) 观察者模式常见的使用场景当一个对象状态的改变需要改变其他对象时。比如,商品库存数量发生变化时,需要通知商品详情页、购物车等系统改变数量。一个对象发生改变时只想要发送通知,而不需要知道接收者是谁。原创 2025-04-01 23:08:20 · 947 阅读 · 0 评论 -
代理模式(Proxy Design Pattern )-深入浅出
jdk代理和CGLIB代理:使用CGLib实现动态代理,CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,在JDK1.6之前比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的类或者方法进行代理,因为CGLib原理是动态生成被代理类的子类。原创 2025-03-27 10:17:59 · 1201 阅读 · 0 评论 -
工厂模式?从图入手快速理解!
工厂方法模式 ,属于创建型模式.概念: 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。工厂方法模式的目的很简单,就是封装对象创建的过程,提升创建对象方法的可复用性。工厂方法模式的主要角色:抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。抽象产品:定义了产品的规范,描述了产品的主要特性和功能。原创 2025-03-24 09:48:20 · 271 阅读 · 0 评论 -
从简单场景认识建造者模式
建造者模式除了上面的用途外,在开发中还有一个常用的使用方式,就是当一个类构造器需要传入很多参数时,如果创建这个类的实例,代码可读性会非常差,而且很容易引入错误,此时就可以利用建造者模式进行重构。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在指挥者类中对整体而言可以取得比较好的稳定性。建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。原创 2025-03-25 08:25:01 · 451 阅读 · 0 评论