设计模式
文章平均质量分 93
设计模式
ReadThroughLife
计算机科学与技术硕士,前世界50强央企Python数字化转型培训讲师,前世界100强企业软件开发工程师
展开
-
《设计模式》责任链模式
定义:责任链模式的角色组成:责任链模式的 UML 类图:抽象处理者 Manager:具体处理者 Leader:具体处理者 CommonManager:具体处理者 GeneralManager:客户端 Client:责任链模式的优点:责任链模式的缺点:责任链模式的适用场景: 中提供了一个 (过滤器)接口,通过过滤器技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,一般常用于实现 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Servlet API 中原创 2023-07-10 20:15:33 · 666 阅读 · 0 评论 -
《设计模式》中介者模式
定义:中介者模式的角色组成:中介者模式的 UML 类图:抽象中介者 :抽象同事 :具体同事房东 :具体同事租客 :具体中介者租房机构 :调用的客户端 :中介者模式的优点:中介者模式的缺点:中介者模式的适用场景: 类用于创建定时器任务。它充当了一个中介者的角色,负责协调计时器任务的创建和执行。通过 类,我们可以创建定时任务,设置任务的执行时间和间隔,并且可以取消已经创建的任务。定时器类部分源码如下:无论什么样的任务都被加入一个队列中按顺序执行,该队列中的所有对象都称为“同事”,同事之间的通信都原创 2023-06-29 17:12:47 · 998 阅读 · 0 评论 -
《设计模式》状态模式
定义:状态模式的角色组成:状态模式的 UML 类图:抽象状态类 :具体状态类 :具体状态类 :具体状态类 :具体状态类 :具体状态类 :具体状态类 :环境类 :客户端类 :状态模式的优点:状态模式的缺点:状态模式的适用场景:很遗憾哈哈,目前无论是在 JDK 还是在 Spring 源码中,具体实现了状态模式的类和接口并不常见(也就是没有哈哈),因为状态模式并非是JDK 或 Spring 框架中广泛采用的设计模式之一。虽然可能没有明确称之为"状态模式",但是可以找到一些与状态模式相似的设计。例原创 2023-05-20 15:26:20 · 947 阅读 · 1 评论 -
《设计模式》备忘录模式
定义:备忘录模式的角色组成:访问者模式的 UML 类图:发起者 Originator 类:备忘录 Memento 类:备忘录管理者 Caretaker 类:客户端 Client 类:备忘录模式的优点:备忘录模式的缺点:备忘录模式的适用场景: 是 标准中定义的一种编解码器,它用于将Java对象序列化为二进制格式,以便在网络上进行传输。 中定义了一个名为 的内部类,用于保存和恢复当前输入流的状态。 类包含了输入流当前位置、缓冲区状态等信息,以便在需要的时候恢复输入流的状态。 源码:在 中,备忘原创 2023-05-16 16:19:18 · 463 阅读 · 0 评论 -
《设计模式》访问者模式
定义:访问模式的角色组成:访问者模式的 UML 类图:UML 类图:抽象元素 Car 接口:具体元素 ElectroCar 类:具体元素 OilCar 类:具体元素 HybridCar 类:抽象访问者 Visitor 接口:具体访问者 FuelVisitor 类:具体访问者 EnduranceVisitor 类:具体访问者 PriceVisitor 类:对象结构 ObjectStructure 类:客户端 Client 类:因此,访问者模式的优点:访问者模式的缺点:访问者模式的适用场原创 2023-05-13 11:41:23 · 972 阅读 · 0 评论 -
《设计模式》策略模式
定义:策略模式的组成角色:策略模式的 UML 类图:针对以上情景案例使用策略模式设计一个方案:上面三种优惠措施相当于三种具体的策略,记作 Discount1、Discount2 以及 Discount3,它们都实现了共同的接口 Discount,设计的 UML 图如下:Discount 接口:Discount1 类:Discount2 类:Discount3 类:Store 类:策略模式的优点:策略模式的缺点:策略模式的使用场景: 接口就是一个抽象策略, 类就是一个环境类,在调用方法时需要传入原创 2023-04-29 08:39:40 · 1087 阅读 · 0 评论 -
《设计模式》观察者模式
定义:观察者模式的组成角色:观察者模式的 UML 类图:抽象主题 Subject:具体主题 ConcreteSubject:抽象观察者 Observer:具体观察者 ConcreteObserver:客户端 Client:输出结果:其实,在 JDK 源码中提供了快速使用观察者模式的骨架,在 包下的 接口(相当于抽象通知者)和 类(相当于观察者对象)。::观察者模式的优点:观察者模式的缺点:观察者模式的应用场景:原创 2023-04-03 18:42:17 · 462 阅读 · 0 评论 -
《设计模式》命令模式
定义:命令模式的优缺点:命令模式的使用场景:命令模式的角色组成:命令模式的原理类图如下所示:案例背景:关系类图如下所示: 接口: 类: 类: 类: 类: 类:命令模式在 Spring 框架中的 JdbcTemplate 源码中的应用: 接口: 类:原创 2023-01-07 16:22:35 · 698 阅读 · 0 评论 -
《设计模式》模板方法模式
定义:模板方法模式包含的角色:作为模板模式的组成角色,抽象类中的模板方法和基本方法又可以细分为:模板方法模式的注意事项:模板方法模式类图案例背景:原理类图如下所示: 类: 类: 类: 类:具体的代码如下所示:模板方法模式在 JDK 源码中的应用:在 父类中已经定义好了读取一个字节数组数据的方法是每次读取一个字节,并将其存储到数组的第一个索引位置,读取 个字节数据。而具体读取一个字节数据的细节,由继承 的子类去实现。原创 2023-01-04 22:41:14 · 356 阅读 · 0 评论 -
《设计模式》代理模式
定义代理模式就是为被访问的目标对象提供一个代理,此时代理对象充当访问对象和目标对象之间的媒介,通过代理对象实现对目标对象的访问。被代理的对象可以是远程对象、创建开销大的对象以及需要安全控制的对象,Java 中的代理按照代理的生成时机不同分为静态代理和动态代理,静态代理就是在编译期就生成代理对象,而动态代理是在 Java 运行时动态生成,而动态代理又分为 JDK 动态代理和 Cglib 动态代理两种。代理模式的角色组成抽象主题类(Subject):通过接口或抽象类声明真实主题和代理对象实现的业务方法。原创 2023-01-02 20:26:38 · 3715 阅读 · 1 评论 -
《设计模式》享元模式
定义:享元模式的使用场景:享元模式中的两种状态:享元模式的成员角色及职责:享元模式的原理类图如下所示:案例背景:设计类图如下所示: 类 类 类 类 类享元模式在 JDK 源码 类中的使用:测试代码原创 2022-12-30 17:02:43 · 440 阅读 · 1 评论 -
《设计模式》外观模式
定义:外观模式的主要角色:外观模式的注意事项:外观模式的使用场景:外观模式的原理类图如下所示:案例背景:小明设计的类图如下所示: 类: 类: 类: 类: 类: 类:外观模式在 Mybatis 框架中的应用: 类 类角色类图如下所示:原创 2022-12-29 16:04:16 · 530 阅读 · 0 评论 -
《设计模式》组合模式
定义:组合模式主要包含三种角色:组合模式的注意事项:组合模式的原理类图如下所示:现在有一个需求,针对一个管理系统的菜单,打印出其包含的所有菜单以及菜单项(菜单项是指不再包含其他内容的菜单条目)的名称,使用组合模式来实现这个案例。类MenuComponent 定义为抽象类,因为有一些共有的属性和行为要在该类中实现,Menu 和 MenuItem 类就可以只覆盖自己感兴趣的方法,而不用搭理不需要或者不感兴趣的方法。Menu 类可以包含子菜单,因此需要覆盖 方法,但是 MenuItem 就不应该有这些方原创 2022-10-19 12:39:09 · 837 阅读 · 0 评论 -
《设计模式》装饰者模式
装饰者模式就是指在不改变现有对象结构的情况下,动态地给对象增加一些职责(额外的功能)的设计模式...原创 2022-10-18 15:04:30 · 609 阅读 · 0 评论 -
《设计模式》桥接模式
定义:桥接模式的注意事项:桥接模式的 UML 类图如下所示:从 UML 图可以看出,抽象类和接口是聚合的关系,其实也是调用和被调用的关系。现有一个需求,需要对不同手机类型的不同品牌实现操作(开关机、上网、打电话)进行编程。使用传统方式解决该问题,分析其 UML 类图如下所示:使用传统方式解决这个问题时,有一个缺点即扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,如果要增加一个手机品牌也需要在各个手机样式类下增加。因此,为了克服这个缺点,决定使用桥接模式改进传统方式,让程原创 2022-10-17 16:44:13 · 1119 阅读 · 0 评论 -
《设计模式》适配器模式
定义:工作原理:用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法,用户收到反馈结果,感觉只是和目标接口交互。适配器的实现方式有三类:类适配器模式、对象适配器模式和接口适配器模式。基本介绍: 类通过继承 类并实现 类接口,从而完成 的适配。以生活中充电器的例子来讲解适配器,充电器本身相当于 ,220V 交流电相当于 ,5V 直流电相当于 .分析的 UML 类图如下所示: 类 类 类 类 类类适配器的注意事项:基本介绍:其基本思路与类适配器模式相同,只是将 类作修改,不原创 2022-10-16 15:35:57 · 674 阅读 · 0 评论 -
《设计模式》建造者模式
定义:建造者模式的四个角色:建造者模式的注意事项:建造者模式原理 UML 类图如下所示:现在有一个盖房子的项目,需求如下:传统的思维方式分析该项目,其 UML 图如下所示: 类 类 类传统方式实现简单易于操作,但是由于过于简单没有设计缓存层对象,也就是说将房子和建房子的过程封装在了一起,增加了耦合性,导致程序的扩展性和维护性不是很好。因此,使用建造者模式的设计思想,将房子和建房子的过程解耦,其 UML 类图如下所示: 类 类 类 类 类 类除此之外,建造者模式在 JDK 中也有应用原创 2022-10-13 18:23:33 · 971 阅读 · 0 评论 -
《设计模式》原型模式
定义:原型模式的 UML 类图如下所示:其中:原型模式的注意事项:使用传统方式对问题进行分析,其 UML 图如下所示: 类 类传统实现方式的优点是简单易操作,也很容易理解。但是,在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂时,效率较为低下。此外,总是需要重新初始化对象,而不是动态地获得对象运行时的状态,不够灵活。使用原型模式解决这个问题,需要让 类实现 接口中的 方法,这样就可以让 类具有复制的能力,让程序具有更高的效率和扩展性。 类 类以上就是使用原型模式原创 2022-10-13 13:56:18 · 560 阅读 · 0 评论 -
《设计模式》工厂模式
工厂模式将实例化的代码提取处理出来,放到一个类中进行统一的管理和维护**,达到与主项目解耦,提高系统可可扩展性和可维护性。三种模式:简单工厂模式、工厂方法模式、抽象工厂模式...原创 2022-10-12 20:27:10 · 632 阅读 · 0 评论 -
《设计模式》单例模式
单例设计模式就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。原创 2022-10-11 16:45:48 · 565 阅读 · 0 评论 -
《设计模式》设计模式的基本原则
定义:一个类只负责一项职责,如类 A 负责两个不同职责:职责1 和职责 2. 当职责1 需求变更而改变类 A 时,可能造成职责2 执行错误,因此需要将类 A 的粒度分解为:A1, A2.应用案例:1、有一个交通工具类 Vehicle, 其包含实例方法 ,不同的交通工具(摩托车、汽车、飞机等)通过调用 方法“启动”。在案例1中的 方法,类 Vehicle 负责了多项职责,即摩托车、汽车和飞机的运行,这就违反了单一职责原则。2、为了遵守单一职责原则,应该让 Vehicle 类只负责一项职责,可以将 Veh原创 2022-10-08 20:21:18 · 1001 阅读 · 0 评论