
快速搞懂设计模式
文章平均质量分 93
用Java语言介绍设计模式,帮助大家快速搞懂设计模式
ThetaarSofVenice
System.out.println(“Java”)
展开
-
少一点If/Else - 状态模式(State Pattern)
环境类(Context):环境类拥有对状态对象的引用,并且提供了客户端访问状态的方法。它还负责管理状态的变化。抽象状态(State):这是一个接口或抽象类,声明了所有具体状态必须实现的方法。这些方法定义了不同状态下对象的行为。具体状态(ConcreteState):具体状态实现了State接口,每个具体状态类都包含了与该状态相关的行为逻辑。@Override// 改变状态@Override// 改变状态状态模式的优点。原创 2025-01-15 22:48:36 · 1663 阅读 · 1 评论 -
还是开个会议吧 - 中介者模式(Mediator Pattern)
如果在一个系统中,对象与对象之间的联系呈现出一种网状结构的时候,这就会导致系统非常复杂。而我们的中介者模式可以使得我们对象之间的关系大量减少。所有的对象都跟中介者进行沟通。这样的话,对象之间的关系就会出现从网状结构转化成星形结构,减少了对象之间的耦合度。降低耦合度:通过引入中介者,减少了对象之间直接的依赖关系,使得系统中的对象更加独立。集中化控制:所有的通信逻辑都集中在中介者中,这有助于管理和维护复杂的交互过程。易于扩展:新增加的同事对象只需要实现同事接口,并注册到中介者中即可,无需修改现有的代码。原创 2025-01-10 17:28:24 · 1467 阅读 · 1 评论 -
一个个顺序挨着来 - 责任链模式(Chain of Responsibility Pattern)
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。目的:解耦请求的发送者与接收者,提供一个灵活的方式来处理请求,支持动态添加或移除处理逻辑。责任链可以帮助我们降低耦合度;增加灵活性;可以帮助我们更好地组织代码。我们上面实现地责任链模式是类似与拦截器的那种方式。责任链还可以设计为一些别的方式。责任链模式一般适用于日志记录;审批流程等等。原创 2025-01-08 23:30:54 · 1084 阅读 · 11 评论 -
开关不一定是开关灯用 - 命令模式(Command Pattern)
降低了系统的耦合度。新的命令可以很容易地加入到系统中。可以方便地实现对请求的撤销和重做。不过,命令模式也可能增加系统的复杂性,因为它需要引入许多新的类。如果系统比较简单,使用命令模式可能会显得过于繁琐。原创 2025-01-09 23:04:57 · 1520 阅读 · 0 评论 -
有时候还是需要后悔药的 - 备忘录模式(Memento Pattern)
发起人(Originator):发起人是一个包含有状态信息的对象,它可以创建一个备忘录,用来记录当前的状态;也可以使用一个备忘录来恢复其状态。} // 创建备忘录 public Memento createMemento() {} // 恢复状态 public void restoreFromMemento(Memento memento) {} }} // 创建备忘录 public Memento createMemento() {原创 2025-01-13 22:15:05 · 846 阅读 · 4 评论 -
更灵活的对象之间的联动 - 观察者模式(Observer Pattern)
主题(Subject):主题接口声明了添加、删除和通知观察者的方法。它可以是接口或抽象类,具体主题实现类会实现这些方法,并维护观察者的列表。} } }List;具体主题(ConcreteSubject):具体主题实现了Subject接口,并包含有状态信息。当状态发生变化时,它会通知所有注册的观察者。// 状态改变后通知所有观察者。原创 2025-01-14 20:24:18 · 1291 阅读 · 8 评论 -
你内部啥样跟我没关系 - 迭代器模式(Iterator Pattern)
迭代器接口(Iterator):声明了用于遍历集合的方法,如 hasNext() 和 next() 等。具体迭代器必须实现这些方法,以提供特定类型的遍历逻辑。T next();具体迭代器(ConcreteIterator):实现了 Iterator 接口的具体类。聚合接口(Aggregate):接口或抽象类,声明了一个创建迭代器对象的方法。具体聚合类必须实现这个方法,以返回一个与之对应的迭代器实例。Iterator;原创 2025-01-03 21:45:21 · 1062 阅读 · 10 评论 -
电影院售票 - 策略模式(Strategy Pattern)
策略接口(Strategy):定义了所有支持算法公共操作的接口或抽象类。具体策略类必须实现这个接口中的方法。具体策略(ConcreteStrategy):实现了 Strategy 接口的具体类。每个具体策略都提供了一种算法的实现方式。@Override@Override上下文(Context):上下文类拥有一个对策略对象的引用,并提供了设置和获取策略的方法。上下文委托给策略对象来执行具体的算法逻辑。// 设置策略// 执行策略= null) {} else {策略模式的优点。原创 2025-01-02 21:46:31 · 1718 阅读 · 2 评论 -
复杂对象的创建与组装 - 建造者模式(Builder Pattern)
产品(Product): 最终被构建出来的复杂对象。它可以是一个具体的类,也可以是包含多个组件的对象。产品对象并不知道如何创建自己;相反,它依赖于建造者来完成其组装。抽象建造者(Builder):接口或抽象类,声明了用于构建各个组件的方法。具体建造者必须实现这些方法,以提供特定类型的对象构建逻辑。具体建造者(ConcreteBuilder):实现了 Builder 接口的具体类。每个具体建造者都对应一种特定的产品类型,并负责一步一步地构建该产品的不同部分。@Override。原创 2025-01-01 22:47:13 · 1535 阅读 · 0 评论 -
能省一点是一点 - 享元模式(Flyweight Pattern)
当一个软件需要创建大量的对象的时候,就会导致内存消耗过多,系统性能下降。而享元模式就是为了解决这个问题而出现的设计模式。享元模式(Flyweight Pattern)的核心思想: 如果一个对象实例创建之后不可变的话,反复创建这种实例就变得没有必要,直接向客户端返回一个共享的实例就可以了,这样既节省了内存,还避免了创建对象的过程,提升运行效率。当代码实现中出现大量相同对象的时候,我们就可以考虑使用享元模式。这种设计模式通过共享对象,节约了内存空间,提升了系统性能。减少内存中的对象数量。原创 2024-12-26 22:42:29 · 1187 阅读 · 0 评论 -
从家谱的层级结构 - 组合模式(Composite Pattern)
定义: 组合多个对象形成树状结构以表示“部分-整体”的层次结构。组合模式让客户端可以一致地使用单个对象和组合。目的: 简化客户端代码对复杂层次结构的操作,同时保持良好的扩展性和灵活性。一致性:客户端可以一致地对待单个对象和组合对象,不需要关心它们的具体类型。灵活性:很容易通过组合模式构建复杂的树形结构,并且可以在不影响现有代码的情况下增加新的组件。符合开闭原则:当需要添加新类型的组件时,只需创建一个新的叶子或组合类,而无需修改现有的代码。原创 2024-12-28 22:56:56 · 1105 阅读 · 2 评论 -
买东西不一定要亲自去,叫个代购也很方便 - 代理模式(Proxy Pattern)
封装变化:可以通过代理对象隐藏真实对象的变化,减少客户端代码与真实对象之间的耦合。增强功能:在不修改真实对象的情况下,通过代理对象添加新的功能,如日志记录、事务管理等。延迟加载:对于大型或复杂对象,可以使用虚拟代理实现延迟加载,提高性能。访问控制:通过保护代理实现细粒度的访问控制,确保只有授权用户才能访问特定资源。代理设计模式是一种非常有用的设计模式,它可以在不修改原始对象的情况下,为其添加额外的功能或控制其访问。然而,在使用时也需要注意其可能带来的复杂性和性能问题。原创 2024-12-27 22:30:41 · 1346 阅读 · 0 评论 -
你穿上马甲我还认识你 - 装饰器(Decorator)模式
装饰器(Decorator)模式定义与目的定义:装饰器模式是在不修改原始类文件和使用继承的情况下,动态地扩展一个对象的功能。目的:能够在运行时将责任附加到对象上,提供一种比静态子类化更灵活的解决方案。装饰器(Decorator)模式包含的角色组件(Component): 定义了所有具体组件和装饰器必须实现的操作。它可以是任何可以被装饰的对象。具体组件(ConcreteComponent) : 实现了 Component 接口的具体类,表示被装饰的基本对象。原创 2024-12-24 19:35:23 · 1344 阅读 · 7 评论 -
有个服务员真好 - 外观模式(Facade Pattern)
外观模式定义与目的定义:为一个复杂的子系统提供一个更简单的接口。目的:简化客户代码对复杂子系统的调用过程,隐藏子系统的内部实现细节。外观模式的角色外观(Facade):提供了简化了的接口给客户端使用。外观类知道如何委托给子系统的各个类,以及如何协调它们的工作。子系统类(Subsystem Classes):每个子系统类都有自己的接口和方法,但它们并不直接暴露给客户端,而是通过外观类来访问。外观模式是一个非常有用的设计模式,特别是在需要简化复杂子系统的使用时。原创 2024-12-25 21:53:58 · 888 阅读 · 0 评论 -
【只生一个好 - 单例设计模式(Singleton Pattern)】
单例模式的优点唯一性:确保了类在整个应用程序中只有一个实例。控制资源:对于需要严格控制资源使用的场合非常适合。延迟加载:可以通过某些实现方式(如懒汉式、静态内部类)实现延迟初始化,节省资源。线程安全:通过适当的实现方式可以保证在多线程环境下的安全性。单例模式的缺点难以测试:单例模式引入了全局状态,这可能使得单元测试变得困难。隐藏依赖关系:因为单例模式通常通过静态方法提供实例,所以依赖关系往往被隐藏起来,不利于依赖注入和代码维护。原创 2024-12-23 18:58:55 · 1564 阅读 · 9 评论 -
带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)
适配器模式定义与目的定义:适配器模式是一种结构型设计模式,它使接口不兼容的对象能够协作。适配器充当两个不兼容接口之间的桥梁。目的:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式的实现方式在Java中,我们主要通过组合或聚合的方式,在适配器内部包含一个对适配者的引用。代码案例// 对象适配器// 构造函数注入适配者@Override适配器模式的过程中一般涉及三个角色:Target 目标。原创 2024-12-22 22:51:03 · 1153 阅读 · 0 评论 -
跟着我左手右手一个慢动作 —— 模板方法模式
我们通过上面的这个案例,让大家了解了模板方法设计模式。这个模式的核心思想是父类定义主干流程,子类负责细节的实现。同时为了防止子类重写父类的主干流程方法,我们可以把主干流程方法设置为final关键字,这个final关键字用于方法的效果是子类不能更改父类的实现。对final关键字不了解的同学,可以看一下我的这篇文章关键字。对于子类需要实现的抽象方法,我们一般使用protected关键字修饰,这样的话,外部客户端就不可见这些方法了。原创 2024-12-20 22:06:20 · 1577 阅读 · 19 评论