Java 设计模式系列
文章平均质量分 55
求和的小熊猫
博客复读机
展开
-
Java 设计模式系列(24) —— 访问者模式
访问者模式 访问者模式是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改,接受这个操作的数据结构则可以保持不变 访问者模式的定义 封装一些用于某种数据结构中的各元素的操作,他可以在不改变数据结构的前提下定义这些元素的新操作。 访问者模式的参与者: visitor 抽象访问者:该角色声明一个或多个访问操作,定义访问者可以访问那些元素 Concrete Visitor 具体访问者角色:该角色实现抽象访问角色中的各个操作 Element 抽象元素角色:该角色声明一个接受操作接受一个访问者对象 Co原创 2021-01-27 21:33:49 · 102 阅读 · 0 评论 -
Java 设计模式系列(23) —— 策略模式
策略模式 策略模式也称政策模式 策略模式的定义 定义一组算法,将每个算法都封装起来,并使它们之间可以互换。 策略模式的参与者 Context 环境角色:该角色也叫上下文角色,起到承上启下的作用,他能够屏蔽高层模块对算法和策略的直接访问,封装可能存在的变化 Strategy 抽象策略角色:该角色定义了每个策略和算法必须具有的方法和属性 ConcreteStrategy 具体策略角色: 该角色实现抽象策略中的具体操作 策略模式简单示例 抽象策略角色 public interface Strategy原创 2021-01-27 21:32:24 · 99 阅读 · 0 评论 -
Java 设计模式系列(22) —— 状态模式
状态模式 状态模式又称为状态对象模式,该模式允许一个对象在其内部状态改变时改变其行为 状态模式的定义 当一个对象内在状态改变时允许其改变行为,这个对象看起来改变了其类 状态模式的参与者 State 抽象状态角色: 该角色用以封装环境对像的一个特定状态所对应的行为 Concrete State 具体状态角色: 该角色实现环境的一个状态所对应的行为 Context 环境角色:该角色定义客户端需要的接口,并负责具体状态的切换。它会保留一个具体状态类的实例,该实例对象会给出环境对象的现有状态。 状态模式的简单示原创 2021-01-27 21:31:20 · 95 阅读 · 0 评论 -
Java 设计模式系列(21) —— 备忘录模式
备忘录模式 备忘录模式,又称快照模式或 Token 模式。 备忘录模式的定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样,以后就可以将该对象恢复到以前保存的状态 备忘录模式的参与者 Originator 发起人角色:该角色负责记录当前时刻的内部状态,负责定义那些属于备份范围的状态,负责创建和恢复备忘数据 Memnto 备忘录角色: 该角色负责存储发起人角色的内部状态,在需要时提供发起人所需要的的内部状态。 Caretaker 备忘录管理员角色: 该角色对备忘录角色进行原创 2021-01-27 21:29:46 · 117 阅读 · 0 评论 -
Java 设计模式系列(20) —— 中介者模式
中介者模式 中介者模式也称调停模式 中介者模式的定义: 用一个中介对象封装一系列对象(同事)的交互,中介者使各个对象不需要显式的的相互作用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 中介者模式的参与者 Mediator 抽象中介者:该角色定义出同事对象到中介者对象的统一接口,用于各个同事角色之间的通信 Concrete Mediator 具体中介者:该角色实现抽象中介者,它依赖于各个同事角色 Colleague 抽象同事角色:该角色定义中介者到同事对象的接口,同事对对象只知道中介者而不知道其余原创 2021-01-27 21:27:35 · 104 阅读 · 0 评论 -
Java 设计模式系列(19) —— 观察者模式
观察者模式 观察者模式,也称发布订阅模式 观察者模式的定义 定义对象中一种一对多的依赖关系,使得当一个对象改变时,则所有依赖于他的对象都会得到通知并被自动更新 观察者模式的参与角色 Subject 被观察者(主题角色):被观察者需要能够动态的增加和取消观察者,它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者 Observer 观察者:观察者受到被观察者的通知后,会执行更新操作,对更新的信息进行处理 ConcreteSubject 具体被观察者(具体主题): 定义观察者原创 2021-01-27 21:26:40 · 75 阅读 · 0 评论 -
Java 设计模式系列(18) —— 迭代器模式
迭代器模式 迭代器模式的定义: 迭代器模式提供一种访问容器对象中各个元素又不暴露该对象的内部细节 迭代器是为容器服务的。容器就是能容纳对象的对象。如果把水看做对象,那么水缸就是容器。 迭代器模式的参与角色 Iterator 抽象迭代器: 该角色负责定义访问和遍历元素的接口 ConcreteIterator 具体迭代器:该角色实现 Iterator 接口,完成容器元素的遍历 Aggregate 抽象容器:该角色提供创建迭代器角色的接口 Concrete Aggregate 具体容器: 该角色实现抽象角色接口原创 2021-01-27 21:25:10 · 104 阅读 · 0 评论 -
Java 设计模式系列(17) —— 解释器模式
解释器模式 解释器模式是一种按照规定语法进行解析的方案。 解释器模式的定义: 给定一门语言,定义它的文法的一种表示并定义一个解释器,该解释器用来表示解释语言中的句子。 解释器模式的参与者: Abstract Expression 抽象解释器角色:该角色声明一个所有具体表达式角色所需要的的接口 TerminalExpression 终结符表达式:该角色实现了抽象表达式所需要的接口 Nonterminal 非终结符表达式:该角色是一个具体角色, Context 环境角色:Context 角色提供一些解释器之外原创 2021-01-24 21:59:49 · 291 阅读 · 2 评论 -
Java 设计模式系列(16) —— 命令模式
命令模式 命令模式,又可以称为行动模式或交易模式 命令模式的定义: 将一个请求封装成为一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 命令模式的参与者: Command 命令角色:该角色声明一个给所有具体命令类的接口,定义需要执行的命令 Concrete Command 具体命令角色:该角色定义一个接收者和行为之间的弱耦合,实现命令方法,并调用接收者的相关操作 Receiver 接收者角色: 该角色负责具体实施和执行一个请求 Invoker 调用原创 2021-01-18 20:38:18 · 132 阅读 · 1 评论 -
Java 设计模式系列(14) —— 享元模式
享元模式 享元模式的定义: 使用共享对象可以有效的支持大量的明细粒度的对象 享元模式是以共享的方式高效的支持大量的细粒度的对象,而享元模式能做到共享的关键是区分内部状态和外部状态。 内部状态:内部状态是存储在享元对象内部的,可以共享的信息,并且这些信息不会随着环境的改变而改变 外部状态:外部状态是对象得以依赖的标记,外部状态是随环境改变而改变且不可以共享的状态 享元模式的参与角色 Flyweight 抽象享元角色:该角色对享元类进行抽象,同时定义对象的外部状态和内部状态的接口或实现 ConcreteF原创 2021-01-14 20:53:59 · 76 阅读 · 0 评论 -
Java 设计模式系列(15) —— 责任链模式
责任链模式 责任链模式的定义: 使多个对象都有机会处理请求,从而避免了请求发送者和请求接受者之间的耦合关系,将这些对象连城一条链,并沿着这条链传递请求,直到有对象处理它为止。 责任链模式涉及的角色: Handler 抽象处理者:该角色对请求进行抽象,并定义一个方法以设定和返回对下一个处理者的引用 Concrete Handler 具体处理者:该角色接到请求后,可以选择将请求处理掉,或者将请求传给下一个处理者 责任链模式的简单示例 抽象处理者 抽象处理者一般采用抽象类,抽象类中有指向下一个抽象处理者原创 2021-01-14 20:52:36 · 123 阅读 · 0 评论 -
Java 设计模式系列(13) —— 外观模式(门面模式)
外观模式(门面模式) 外观模式的定义: 要求一个子系统的外部预期内部的通信必须通过一个统一的对象进行,外观模式提供了一个高层次的接口,使得子系统更容易使用 外观模式的参与者: Client 客户端: Facade 子系统接口:客户端可以调用该角色的方法,该角色知晓相关模块的子功能和责任。该门面是客户端调用子系统的桥梁。 Subsystem 子系统中定义的类:子系统是具体业务的实现,但是子系统并不需要被调用的是谁 外观模式的简单示例 Subsystem SubClassA public class原创 2021-01-12 22:57:11 · 97 阅读 · 0 评论 -
java 设计模式系列(12) —— 组合模式
组合模式 组合模式又称合成模式,用来描述部分与整体之间的关系 组合模式的定义: 将对象组合成树形结构以表示“部分-整体”的层次机构,使得用户对单个对象和组合对象的使用具有一致性。 组合模式IDE三个角色: Component 抽象构件角色: 该角色定义了参加组合对象共有的方法和属性。 Leaf 叶子构件角色: 该角色是叶子对象,其下没有其他分支。 Composite 树枝构建角色: 组合树枝节点和叶子节点形成的一个树形结构。 组合模式的简单示例 抽象构件角色 该对象既可以是接口,也可以是抽象类 a原创 2021-01-12 22:32:38 · 140 阅读 · 0 评论 -
Java 设计模式系列(11) —— 桥接模式
桥接模式 桥接模式的定义: 将抽象和实现解耦,是两者可以独立的变化 桥接模式的参与者: Abstraction 抽象化角色: 该角色抽象化的给出定义,并保存一个对实现化对象的引用。 RefinedAbstaraction 修正抽象化角色:该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正。 Implementor 实现化角色:该角色给出实现化角色的接口,但不给出具体的实现 ConcreteImplementor 具体实现化角色:该角色对实现化角色接口中的方法进行具体的实现 桥接模式的简单示例原创 2021-01-12 22:31:33 · 100 阅读 · 0 评论 -
Java 设计模式系列(10) —— 装饰器模式
装饰器模式 装饰器模式的定义: 动态的给一个对象添加额外的职责,就功能来说,装饰模式相比子类更为灵活 装饰器模式的四个角色: Componment 抽象构建角色:该角色用于规范需要装饰的对象 ConcreateComponment 具体构建角色:该角色是需要被装饰地 对象 Decorator: 装饰角色:一般是一个抽象类,该角色持有私有的一个抽象构件对象 ConcreateDecorator: 具体装饰角色;感觉主要负责对构件对象进行装饰 装饰器模式的简单示例 抽象构件角色 public inte原创 2021-01-09 16:45:54 · 100 阅读 · 0 评论 -
Java 设计模式系列(9) —— 代理模式
代理模式 代理模式的定义: 代理模式为其他对象提供一种代理以控制这个对象的访问、 代理模式的三个主要角色: Subject 抽象主题角色:抽象主题类的主要职责是声明真实主题与代理的共同接口方法,该类可以是接口也可以是抽象类 ProxySubject 代理主题角色: 该角色主要负责引用和控制真实主题,负责在需要的时候创建或删除真实主题对象 RealSubject 真实主题角色: 该类是代理标识的真实对象,是业务逻辑的具体执行者 代理模式的种类 1. 远程代理 远程代理就是将工作委托给远程对象(不同的进程,原创 2021-01-06 20:23:49 · 99 阅读 · 0 评论 -
Java 设计模式系列(8) —— 适配器模式
适配器模式 适配器模式的定义: 将一个类的接口变换成为客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类可以在一起工作。 采用适配模式的目的是将先有的旧接口转换成新的刻画短接口,我们的目标是尽可能多地重用原来已经测试过的代码,并且可以对新接口自由地进行修改。 适配器的三个角色: Target 目标角色:该角色定义要转换成的目标接口 Adaptee 源角色: 需要被转换的就的接口 Adapter 适配器角色: 通过继承Target 适配器的简单示例 Target 角色 publ原创 2021-01-04 23:53:30 · 126 阅读 · 0 评论 -
Java 设计模式系列(7) —— 对象池模式
对象池模式 对象的示例化是最耗费性能的操作之一,这在过去是一个大问题,现在我们不用再过于关注它。当我们处理封装外部资源时,对象的创建操作则会耗费很多资源。 解决方案是重用和共享这些创建成本高昂的对象,这称为对象池模式 对象池模式的参与者: ResourcePool (资源池类): 用于封装逻辑的类,用来保存和管理资源列表 Resource (资源类): 用于封装特定资源的类。资源类通常被池资源引用,因此只要资源池不重新分配,他们就永远不会回收。 Client (客户端类):使用资源的类 对象池模式的简原创 2021-01-04 21:33:28 · 257 阅读 · 0 评论 -
Java 设计模式系列(6) —— 原型模式
原型模式 原型模式的定义: 用原型实例创建对象的种类,并且通过复制这些原型创建新的对象 原型模式涉及的三个角色: Client 角色 (客户角色): 该角色提出创建对象的请求 Prototype 角色 (抽象原型角色):该角色用于给出具体原型所需的接口,常由接口或抽象类担任 Concrete Protype 角色 (具体角色): 该角色是被复制的对象必须实现抽象原型的接口 浅拷贝与深拷贝 当拷贝对象时,拷贝的对象只包含简单的数据类型,或不可变对象时,就直接将这些字段复制到新对象中 但是如果拷贝对象中包含原创 2021-01-04 21:32:29 · 122 阅读 · 0 评论 -
Java 设计模式系列(5) —— 建造者模式
建造者模式 建造者模式的定义: 讲一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 建造这的四个参与对象 Product 对象:表示要被构造的复杂对象。该对象往往是通过模板模式进行实现的。 Builder 对象: 是具体构造对象 ConcreteBuilder 的指定接口。 ConcreteBuilder 对象: 实现 Builder 对象的接口以及构造和装配该产品的各个产品。 Director 对象: 负责调用 Builder 接口,并用该接口构造对象。 首先,我们可以从中原创 2021-01-03 22:22:18 · 89 阅读 · 0 评论 -
Java 设计模式系列(3) —— 模板方法模式
模板方法模式 什么是模板方法模式? 模板方法模式的定义: 定义一个操作算法的框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法结构,即可重新定义该算法的某些特定步骤。 模板方法的参与者: 模板方法:一个模板方法至少对应一个或多个基本犯法,通过模板方法可以完成对基本方法的调用 基本方法:继承或实现了模板方法,并可以被模板方法对象调用。 通过以上的定义,可能还是云里雾里的。依旧不明所以。那么通过一个简单的示例便会恍然大悟 模板方法示例 模板方法 public interface Candy {原创 2021-01-03 12:02:35 · 95 阅读 · 2 评论 -
Java 设计模式系列(4) —— 工厂模式
工厂方法模式 工厂模式用于实现逻辑的封装,并通过公共的忌口提供对象的实例化服务,在添加新类时只需要做少量的修改。 1. 静态工厂模式(简单工厂模式) 静态工厂属于创建者模式,静态工厂模式的实现需要三个角色 简单工厂:负责创建具体产品产品,工厂类的方法可以被外界直接调用 抽象产品:在 Java 中,抽象产品是由抽象类或者接口担任的,用以让具体产品继承或实现 具体产品:在 Java 中,具体产品是工厂类创建的主要对象。 静态工厂的通用写法 工厂角色 public class CandyFactory原创 2020-12-31 22:56:33 · 147 阅读 · 0 评论 -
JAVA 设计模式系列(2) —— 设计原则
Java 设计模式的相关原则 一、单一职责原则 单一职责原则: 应该有且仅有一个原则引起类的变更 单一职责可以简答的理解为,一个类或者对象,承担的只能应该尽可能单一。 单一职责的优点: 降低类的复杂性 提高代码的可读性 可维护性提高 变更引起的风险降低 如何理解单一职责原则: 例如有一个类里面包含了属性以及属性的 get 与 set 方法和一些操作这个类的诸多属性而完成的相关业务逻辑。此时我们可以将这个类分为两个对象,一个用于管理对象的属性,另一个用于管理对象的业务逻辑。 单一职责用“职责”和“变化原因原创 2020-12-28 23:35:04 · 73 阅读 · 0 评论 -
Java 设计模式系列(1) —— 单例模式
单例设计模式 单例模式的特点 某个类只能有一个实例 它必须自行创建这个类 它不许向整个系统提供这个类的实例 饿汉模式/立即加载 饿汉式的特点: 在使用类时就已经将对象加载完毕 饿汉式的缺点: 由于在使用前就加载完毕,会造成内存资源的浪费 在获取实例时,若没有同步方法,容易产生非线程安全问题。 饿汉式的创建方式: 静态常量饿汉式 静态代码块饿汉式 枚举类 静态常量饿汉式 // 静态常量的饿汉式 public class Singleton1 { private static Singleton1原创 2020-12-08 21:45:29 · 101 阅读 · 0 评论