设计模式
文章平均质量分 65
学习和记录java开发过程中的23种设计模式
代码地址:https://gitee.com/qjq0903/design/tree/master/src/shejimoshi
MR乔.
菜逼一个,努力进化中。
展开
-
状态模式
我们只需要操作代码是computer.state的方法,当我们电脑从开机到关机,内部状态发生改变的时候,同样一个方法,可以表现他的不同行为。新状态的添加不会影响到现有的状态类和上下文类,只需新增状态类即可。:添加新状态只需创建新的状态类,而不需要修改已有的状态类和上下文类。:将每个状态的行为集中到一个类中,使得每个状态的处理逻辑更集中,代码更易于理解和管理。:状态模式通过将不同状态的行为封装在具体的状态类中,减少了上下文类中的条件判断(如。实现了状态接口的具体状态类,封装了与该状态相关的具体行为。原创 2024-07-31 21:08:50 · 900 阅读 · 0 评论 -
备忘录模式
这对于实现“撤销”和“恢复”功能非常有用,例如文本编辑器中的撤销操作,或者游戏中的存档和恢复功能。备忘录模式将状态的保存和恢复从对象的业务逻辑中分离出来,使得对象可以专注于自身的核心功能,而看护者类负责管理状态的保存和恢复。备忘录模式通过备忘录对象封装了对象的内部状态,保护了对象的内部结构和实现细节。这样,外部代码无需了解对象的内部状态即可保存和恢复对象的状态。结合栈或者队列,去达到获取某一个特定位置的元素,换成备忘录模式,就是获取某一个阶段的对象状态。不用知道对象内部,实现对象的保存和删除后的恢复。原创 2024-07-31 20:46:32 · 400 阅读 · 0 评论 -
模板方法模式
/抽象类//模板方法EndTime();//下面三个都是普通方法//具体方法System.out.println("接口开始时间"+new Date());System.out.println("接口结束时间"+new Date());//抽象方法//钩子方法System.out.println("转为逻辑删除");原创 2024-07-28 19:01:27 · 233 阅读 · 0 评论 -
命令模式
将请求或操作封装成一个对象,从而使得可以参数化 clients 希望执行的操作。原创 2024-07-30 20:36:33 · 318 阅读 · 0 评论 -
迭代器模式
提供一种方法来顺序访问一个聚合对象(如集合、列表、数组等)中的元素,而无需暴露其内部表示。原创 2024-07-30 20:11:03 · 304 阅读 · 0 评论 -
解释器模式
定义解释器模式中所有表达式的抽象接口或抽象类。通常包含一个。原创 2024-07-29 20:42:41 · 734 阅读 · 0 评论 -
访问者模式
将数据结构和操作分离开来,使得可以在不改变数据结构的前提下定义新的操作。原创 2024-07-25 21:00:26 · 321 阅读 · 0 评论 -
策略模式
定义上下文=null){}else {System.out.println("错误");原创 2024-07-28 18:21:32 · 239 阅读 · 0 评论 -
组合模式(透明组合模式)
在组件(5.1)中就声明了复合对象(5.2)和叶子节点(5.3)的所有方法,是比较标准的,但是对于叶子节点来说,新增或删除叶子节点的方法是没有必要的。: 表示组合中的叶子节点对象,它没有子节点。它声明了在组合中管理子组件的方法,如添加、移除和获取子组件。相对于透明组合模式,安全组合模式没有在组件中声明这些方法,而是在复合对象中声明,叶子节点可以不用实现这些方法。复合对象实现了组件接口,并且通常会存储子组件,实现组件接口中的操作方法。4.通过叶子节点和符合对象的递归组合,形成树形结构,但是对结构控制很简单。原创 2024-07-18 21:02:21 · 374 阅读 · 0 评论 -
观察者模式
它包含了一个观察者列表,可以增加或删除观察者对象。当它的状态发生变化时,会通知所有注册过的观察者。当观察的主题状态发生变化时,Observer会接收到通知并进行相应的更新操作。:主题和观察者之间是松耦合的,主题只知道观察者实现了特定的接口,不需要了解观察者的具体实现。定义了一对多的关系,当一个对象的状态发生改变,依赖于他的对象也会收到通知改变。:主题对象可以向所有注册的观察者同时发送通知,观察者收到通知后可以自行处理。:可以灵活地增加新的观察者,或者移除现有的观察者,而不需要修改主题的代码。原创 2024-07-23 21:45:49 · 368 阅读 · 0 评论 -
中介者模式
Spring框架中的ApplicationContext充当了中介者的角色,通过集中管理Bean的依赖注入、事件传播、AOP切面等功能,帮助开发者实现了高度解耦和灵活的应用架构。Hibernate的Session作为中介者,隐藏了数据库访问的细节,使得应用程序能够专注于业务逻辑的开发,同时提供了高度的灵活性和可维护性。简化对象: 对象可以专注于自身的功能,而不需要关注与其他对象的交互方式,从而简化了对象的实现。具体的中介者实现了这些方法,负责实际的协调和管理对象之间的交互。原创 2024-07-24 19:40:32 · 707 阅读 · 0 评论 -
责任链模式
实现了Handler接口的基本方法,并包含一个成员变量保存后继处理者的引用。原创 2024-07-22 20:54:30 · 186 阅读 · 0 评论 -
享元模式
适用于需要创建大量相似对象的情况,核心思想是共享对象,以减少系统中对象的数量,从而节省内存和提高性能。原创 2024-07-20 14:38:26 · 268 阅读 · 0 评论 -
外观模式(门面模式)
提供一个统一的接口,隐藏系统的复杂性。将一个比较复杂的类的内部操作隐藏起来,提取一个简单易懂的接口供用户使用。jdbc我们只需要填一些固定参数,不用去知道他具体怎么运行的,在我看来,很多框架的底层都有外观模式的影子,我们只需要知道他是做什么的,不用去研究源码怎么运行。原创 2024-07-16 22:21:30 · 168 阅读 · 1 评论 -
装饰器模式
装饰器模式通过递归组合来实现对对象行为的动态增加,同时保持接口的一致性,使得客户端可以透明地使用装饰后的对象。BufferedWriter使用装饰者模式对writer进行了增强,添加了缓冲区,提供了写数据的效率。2.具体构建角色:StubkCoffee,LuckingCoffee。装饰器是用来动态增加对象的功能,通过递归实现。代理模式是控制对象的访问,通过生成代理对象。4.具体装饰器角色:测试类 进行具体的组装。3.装饰器角色:Milk,Sugar。1.抽象构建角色:coffee接口。原创 2024-07-15 22:09:39 · 231 阅读 · 0 评论 -
代理模式(静态,jdk动态代理,cglib动态代理)
每个都需要手动生成一个代理类,繁琐,耦合度高(动态代理优化)在不改动原有代码的情况下,进行逻辑的增加。原创 2024-07-05 16:20:45 · 137 阅读 · 0 评论 -
桥接模式Bridge
将抽象部分与实现部分分离,使它们可以独立变化。例子:小米有线耳机,首先有线耳机继承于耳机,其次小米有线耳机继承于有线耳机。当我们需要新增一个无线耳机或者品牌,就需要重新写一套继承关系。桥接模式:将品牌和耳机单独提出来,只需后期组合就ok。原创 2024-07-05 14:26:36 · 302 阅读 · 0 评论 -
适配器模式
1.用于将一个类的接口转换成客户端期望的另一个接口。它主要用于解决接口不兼容的问题。2.允许不兼容接口的类能够一起工作,充当一个转换器。3.springmvc中的处理器适配器就是典型例子。原创 2024-07-04 15:29:44 · 491 阅读 · 0 评论 -
原型模式(克隆)
如果某个对象的构造函数或者初始化过程比较复杂,而且需要创建多个相似对象,使用原型模式可以简化对象的创建过程,通过复制现有对象来避免复杂的初始化逻辑。当需要创建一个对象,这个对象的数据需要保护不被外部修改,同时又需要在某些时候复制该对象并进行修改时,原型模式可以帮助实现这种保护性拷贝。当系统需要动态地配置对象,根据用户或者环境的不同配置创建不同的对象时,原型模式可以作为一种简洁的创建对象方式。当类之间的区别仅在于其初始化数据时,可以使用原型模式避免创建多个相似的子类。深拷贝:全新的对象。原创 2024-07-03 14:59:13 · 506 阅读 · 0 评论 -
建造者模式
负责使用 Builder 接口的对象来构建对象。Director 决定构建的步骤顺序,以及在何时使用 Builder 来构建对象。: 实现 Builder 接口,实现各个构建步骤的具体逻辑,并且能够返回构建好的对象。: 要创建的复杂对象。Builder 构建对象的各个部分,最终返回一个完整的产品。提供创建对象的最佳方式,工厂类似于创造出零件,建造者负责把零件拼装起来。: 定义创建对象各部分的接口。通常包括构建对象的各个步骤的方法。适用于:有复杂的对象属性,但是对象的属性具有共同性。原创 2024-07-02 14:11:10 · 345 阅读 · 0 评论 -
抽象工厂模式
在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如NIKE工厂生产的nike鞋、nike衣服,nike鞋位于鞋产品等级结构中,衣服位于衣服产品等级结构中。:产品等级结构即产品的继承结构,如一个抽象类是鞋子,其子类有阿迪达斯鞋子,nike鞋子,则抽象鞋与具体品牌的鞋之间构成了一个产品等级结构,抽象鞋是父类,而具体品牌的鞋是其子类。解释:简单工厂模式,只能有一个产品,例如nike简单工厂只能生成衣物,但是实际情况还可以生产鞋,衣服。管理工厂的工厂,抽象工厂是一个约束。原创 2024-07-01 14:31:10 · 253 阅读 · 0 评论 -
单例模式(饿汉,懒汉)
当我们使用反射破坏的时候会显示,为什么不是Cannot reflectively create enum objects。反编译我们的class文件:发现空参构造函数是存在的。那证明这个文件肯定是反编译出了问题。下载jad反编译软件,随后反编译,在对应的文件找反编译后的java文件。将对应空参改为传入String和int。原创 2024-06-29 12:07:46 · 380 阅读 · 0 评论 -
简单工厂模式和工厂方法模式
简单工厂:将所有对象的创建放在一个类中,只需要调用的时候传入标识,但是如果新加参数,需要修改工厂代码。但在实际应用上:结构复杂度,代码复杂度,编程复杂度,管理复杂度都是简单工厂胜出。工厂方法:每个对象都会有一个对应的工厂,使用的时候只需要调用对应的工厂即可。在开闭原则上,简单工厂需要修改工厂代码,不符合原则。工厂方法符合开闭原则。将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。实例化对象不使用new,用工厂方法代替。在原有的基础上,为每个品牌增加品牌工厂。原创 2024-06-30 15:46:43 · 405 阅读 · 0 评论