![](https://img-blog.csdnimg.cn/dd62023cbf8141adaae64e58ccd45d59.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
文章平均质量分 88
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
swadian2008
不积跬步,无以至千里;不积小流,无以成江海
展开
-
Java 设计模式之观察者模式
观察者模式是一种行为设计模式,它定义了对象之间的一种一对多的关系,以便当一个对象的状态发生改变时,其所有依赖对象都会被自动通知和更新。观察者模式的核心是两个角色:Subject和Observer。Subject是被观察的对象,它包含一个观察者列表,并提供添加和删除观察者的方法。Observer是观察者对象,它定义了一个更新方法,当Subject的状态发生变化时,Observer会接收到通知,并调用更新方法进行相应的操作。观察者模式的流程如下:// 观察模式的实现步骤,很重要。原创 2023-04-26 13:30:37 · 639 阅读 · 0 评论 -
23 种设计模式详解
目的设计模式简要说明可改版的方面创建型Singleton单例保证一个类仅有一个实例,并提供一个访问它的全局访问点。类的单个实例抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。产品对象族Prototype原型用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的象。实例化类的对象Builder建造者将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。如何建立一个组合对象工厂方法。原创 2021-03-23 11:01:15 · 4624 阅读 · 0 评论 -
Java设计模式之桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,用于将一个类或一组类的抽象与实现分离,以便它们可以独立变化。桥接模式通过将抽象部分与实现部分分离开来,使得它们可以独立地变化,从而提高了系统的灵活性和可扩展性。在Java中,桥接模式的实现通常涉及到一个抽象类或接口,它定义了一组抽象方法,代表着某些操作或行为,但没有具体实现。这个抽象类或接口会被一个或多个具体实现类所实现,这些具体实现类负责实现抽象方法,从而为客户端提供具体的功能。原创 2023-04-13 14:23:54 · 589 阅读 · 0 评论 -
Java 设计模式之组合模式
在 Java 组合模式中,抽象构件角色定义了所有叶子节点和容器节点共有的方法和属性,其中包括添加、移除子节点、获取子节点等方法。容器节点角色表示树形结构中的非叶子节点,它包含了其他的组合对象或叶子对象,可以用于组织和管理它所包含的子节点。定义容器构件(Composite)类,它是组合中的容器节点对象,它可以包含子节点,也可以有自己的方法和属性。在该类中通常包含一个用于存储子节点的容器。在客户端代码中使用组合模式构建对象树,通过调用容器节点的方法来增加、删除子节点,通过调用叶子节点的方法来访问节点数据。原创 2023-04-13 14:18:16 · 1933 阅读 · 0 评论 -
Java设计模式之责任链模式
这里,我们创建了两个具体的处理器对象,将它们链接起来形成一个处理器链,并使用第一个处理器来处理一个请求。在责任链模式中,每个处理器都有一个处理方法,当请求到达时,它首先判断自己能否处理该请求,如果可以处理就处理请求,否则将请求传递给下一个处理器,直到请求被处理为止。在处理异常的过程中,我们可以使用多个catch块来捕获不同类型的异常,这就是责任链模式的一种应用。可以看到,在实现中,每个处理器都有一个处理方法handle(),它判断是否能够处理当前请求,如果可以处理就处理请求,否则将请求传递给下一个处理器。原创 2023-04-13 13:27:57 · 622 阅读 · 0 评论 -
Java设计模式之建造者模式(精髓版)
另外,在一些框架和项目中也经常使用建造者模式来构建复杂的对象,例如,在 Spring 框架中,我们可以使用建造者模式来创建 ApplicationContext 对象。这个示例代码中使用了建造者模式来创建不同类型的汽车对象,通过将创建过程分离到不同的建造者对象中,从而简化了创建过程,并且可以通过不同的建造者对象来创建不同类型的对象。提高代码的可扩展性:使用建造者模式可以方便地扩展对象的创建过程,可以在不影响其他代码的情况下添加新的建造者对象和创建步骤。然后,我们定义了一个抽象建造者类。原创 2023-04-13 11:38:20 · 750 阅读 · 0 评论 -
Java设计模式之策略模式
Spring AOP 提供了不同的切面(aspect)实现类,而调用者可以通过配置来指定不同的切面策略,例如通过切面实现类实现事务管理、日志记录等功能。总之,策略模式是一种常用的设计模式,在 Java 中有很多使用策略模式的代码。这些代码的共同点是它们将不同的算法或者行为封装到不同的策略类中,并且允许调用者根据需要选择不同的策略实现类来实现不同的行为。在Java中,策略模式经常被用于解决业务中的问题,例如根据不同的用户类型提供不同的价格计算策略,或者根据不同的排序方式对一组数据进行排序等。原创 2023-04-13 10:42:47 · 953 阅读 · 0 评论 -
Java设计模式之适配器模式
Java 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换为客户端所期望的另一个接口。这种模式可以让原本不兼容的接口能够一起工作。在 Java 中,适配器模式通常涉及到三个角色:目标接口(Target Interface):客户端所期望的接口,也就是客户端真正需要的接口。适配器类(Adapter Class):将不兼容的接口转换为客户端所期望的接口的类。适配者类(Adaptee Class):需要被适配的原始接口。原创 2023-04-13 09:45:34 · 3234 阅读 · 0 评论 -
设计模式之装饰者模式
装饰者模式是一种结构型设计模式,它允许在不修改现有对象结构的情况下,动态地添加功能或行为。在装饰者模式中,我们定义了一个装饰者类来包装原始对象,从而扩展其功能或行为。以下是一个使用Java代码描述装饰者模式的示例:首先,我们定义一个接口Component,它表示一个抽象组件,可以是一个具体对象或者是一个抽象对象,它定义了一个操作方法operation。然后,我们定义一个具体组件ConcreteComponent,实现Component接口,它是我们需要被装饰的原始对象。原创 2023-04-12 16:33:22 · 839 阅读 · 0 评论 -
钩子方法和回调函数详解
回调函数(callback function)允许一个函数将另一个函数作为参数传递,并在需要的时候调用该函数。在Java中,可以使用接口或Lambda表达式实现回调函数。以下是一个简单的回调函数示例:(1)首先,我们需要定义一个接口,该接口定义了回调函数的规范。在这个例子中,我们定义了一个名为Callback的接口,它有一个方法onResult,该方法接受一个整数参数。(2)然后,我们创建一个类,该类中包含了我们需要执行的业务逻辑代码。在这个例子中,我们假设这段代码是计算两个整数的和。原创 2023-04-12 14:47:30 · 3907 阅读 · 0 评论 -
Java设计模式之代理模式
Java代理模式(Proxy Pattern)是一种常见的设计模式,它允许在不改变原有代码的情况下,通过添加一个代理对象来控制对原始对象的访问。代理对象拥有与原始对象相同的接口,并且可以在原始对象的方法调用前后执行一些额外的操作。代理模式在Java中的应用非常广泛,例如AOP(面向切面编程)和RMI(远程方法调用)都是基于代理模式实现的。Java中代理模式有两种实现方式:静态代理和动态代理。原创 2022-10-09 10:11:34 · 394 阅读 · 0 评论 -
Java设计模式之工厂模式(精髓版)
/ 在一个工厂里创建的产品比较多,并非单一的产品,比如在一个工厂同时生产了手机和电视机,这是两个不同的对象,简单点来理解就是同时创建了多个对象。需要统一管理对象的创建:当系统中存在多个对象需要创建时,可以使用工厂模式来将对象的创建集中管理,从而方便统一管理和维护对象。需要创建复杂的对象:当需要创建一个复杂的对象时,可以使用工厂模式来将对象的创建过程集中管理,从而使代码更加清晰和易于维护。提高代码的复用性:工厂模式可以提供一种统一的创建产品的接口,从而使得系统可以灵活地更换产品实现,提高了代码的复用性。原创 2022-09-30 16:35:42 · 230 阅读 · 0 评论 -
Java设计模式之原型模式
(1)什么是原型模式?如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式,简称原型模式。// 原型模式,最为常用经典就是BeanUtils(2)原型模式的两种实现方法原型模式有两种实现方法,深拷贝和浅拷贝。原创 2022-10-09 09:06:06 · 574 阅读 · 0 评论 -
建造者模式:详解构造函数、set方法、建造者模式三种对象创建方式
建造者模式是比较常用的创建型设计模式。Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。比如,你有没有考虑过这样几个问题:直接使用构造函数或者配合 set 方法就能创建对象,为什么还需要建造者模式来创建呢?建造者模式和工厂模式都可以创建对象,那它们两个的区别在哪里呢?原创 2022-09-30 09:43:24 · 295 阅读 · 0 评论 -
Java设计模式之模板方法模式
具体的实现由子类提供,ConcreteClass是AbstractClass的一个具体子类,它实现了算法的特定部分,同时重写了钩子方法hookMethod以控制算法的执行。Java中的模板方法模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中。该模式的主要目的是将算法的通用部分抽象出来,以便于在不同的实现中共享代码,同时也便于在子类中实现算法的特定部分。在模板方法模式中,抽象类定义了一个模板方法,该方法包含了算法的骨架,而具体的实现则由子类提供。通过在模板方法中定义。原创 2022-05-07 10:54:45 · 208 阅读 · 0 评论 -
Java中的浅克隆和深克隆详细分析
在Java中,对象的克隆(Clone)可以使用 Object 类的 clone() 方法实现。Java中的克隆分为浅克隆(Shallow Copy)和深克隆(Deep Copy)两种方式。深克隆和浅克隆是为了在需要克隆一个对象时,提供不同的选择。浅克隆会复制对象的所有属性,但是不会复制属性指向的对象,两个对象的属性指向同一个对象。换句话说,浅克隆只是创建了一个新的对象,新对象中的引用类型属性指向的还是原对象中相应的引用类型属性的地址。原创 2021-04-22 16:57:18 · 997 阅读 · 0 评论 -
Java设计模式之工厂模式
/ 工厂方法的一个弊端是,如果工厂不只是生产一种类型的对象,或者说对象不是根据一种特征分类,那工厂方法的类将会非常多,难以维护;抽象工厂就是让一个工厂可以生产不同类型的对象。在简单工厂和工厂方法中,类只有一种分类方式。比如,在规则配置解析那个例子中,解析器类只会根据配置文件格式(Json、Xml、Yaml……)来分类。原创 2021-03-31 14:27:06 · 1150 阅读 · 2 评论 -
软件设计的七大原则,超详细
开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。转载 2020-04-05 21:33:16 · 17155 阅读 · 2 评论 -
UML统一建模语言,类图、时序图等详解
统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标准。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。统一建模语言能为软件开发的所有阶段提供模型化和可视化支持。而且融入了软件工程领域的新思想、新方法和新技术,使软件设计人员沟通更简明,进一步缩短了设计时间,减少开发成本。它的应用领域很宽,不仅适合于一般系统的开发,而且适合于并行与分布式系统的建模。原创 2020-03-25 16:04:38 · 2730 阅读 · 1 评论