设计模式
在特定环境下,针对重复出现的特定问题解决方案
HeloJ
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
职责链模式
1. 类图 Handler:定义职责的接口,通常定义处理请求的方法,可以在此处实现后继链 ConcreteHandler:实现职责的类,对职责范围内请求的处理,对职责范围外请求的转发 Client:客户端,向链上的具体处理对象提交请求,让职责链负责处理 2. 示例 分离职责,动态组合 2.1 职责接口 public abstract class Handler { // 持有后继的职责对象 protected Handler handler; public v原创 2021-05-07 21:10:12 · 126 阅读 · 0 评论 -
命令模式
1. 类图 Command:命令接口,声明执行的方法 ConcreteCommand:命令接口实现,持有并调用接收者的功能 Receiver:接收者,执行命令的对象 Invoker:要求命令对象执行请求,通常持有命令对象 Client:创建具体的命令对象,并设置命令对象的接收者 2. 示例 将请求封装成对象 2.1 命令接口 public interface Command { void execute(); } 2.2 命令实现 持有命令真正执行的对象 pub原创 2021-05-07 21:09:56 · 112 阅读 · 0 评论 -
解释器模式
1. 类图 AbstractExpression:解释器接口 TerminalExpression:终结符解释器,解析句子的结束符 NonterminalExpression:非终结符解释器,用来实现语法规则中非终结符相关的操作。可以有多种非终结符解释器 Context:上下文,通常包含各个解释器需要的数据或是公共的功能 Client:使用解释器的客户端,按照语言的语法表达式转换成使用解释器对象描述的抽象语法树,然后调用解释操作 2. 示例 解释器对给定语法的句子进行解析 对字符串1原创 2021-05-07 21:09:31 · 149 阅读 · 0 评论 -
迭代器模式
1. 类图 Iterator:迭代器接口。定义访问和遍历元素的接口 ConcreteIterator:迭代器实现类。实现对聚合对象的遍历,并跟踪遍历时的当前位置 Aggregate:聚合对象。定义创建相应迭代器对象的接口 ConcreteAggregate:聚合对象实现。实现创建相应的迭代器对象 2. 示例 统一访问聚合元素的方法 2.1 迭代器接口 public interface Iterator { void first(); void next();原创 2021-05-07 21:09:09 · 118 阅读 · 0 评论 -
中介者模式
1. 类图 Mediator:中介者接口。定义各个同事之间交互需要的方法 ConcreteMediator:中介者实现。了解和维护各个同事,并负责协调同事间的交互关系 Colleague:同事类父类,通常为抽象类。主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能 ConcreteColleague:具体的同事类,需要与其他同事通信时,就持有中介者通信 2. 示例 将多个对象之间的交互统一封装 2.1 中介者接口 public interface Mediator {原创 2021-05-06 10:05:24 · 127 阅读 · 0 评论 -
访问者模式
1. 类图 Visitor:访问者接口,为所有访问者声明一个方法,用来代表对对象结构添加的功能 ConcreteVisitor:具体访问者,实现添加的功能 Element:元素对象,对象结构的顶层接口,定义接收访问的操作 ConcreteElement:具体元素对象,回调访问者的真实功能,开放自身的数据供访问者使用 ObjectStructure:对象结构,包含多个被访问的对象 2. 示例 为可能扩展的对象预留回路,通过回调的方式进行功能扩展,避免对对象的修改 2.1 现有对象抽象类原创 2021-05-06 10:05:06 · 159 阅读 · 0 评论 -
模板方法模式
1. 类图 AbstractClass:抽象类。定义算法骨架和抽象操作 ConcreteClass:具体实现类。实现抽象类中的抽象操作 2. 示例 父类固定算法框架,子类父子框架内部实现 2.1 对象实体 public class LoginModel { private String username; private String password; public String getUsername() { return username;原创 2021-05-06 10:04:49 · 125 阅读 · 0 评论 -
策略模式
1. 类图 Context:上下文,和具体的策略类交互 Strategy:策略接口,约束一系列具体的策略算法 ConcreteStrategy:具体策略算法实现 2. 示例 分离算法,选择实现,算法可任意替换 2.1 策略接口 public interface Strategy { double calcPrice(double price); } 2.2 策略实现 public class NormalCustomerStrategy implements Strate原创 2021-05-06 10:04:27 · 127 阅读 · 0 评论 -
状态模式
1. 类图 Context:上下文,封装不同的状态 State:封装与上下文的一个特定状态所对应的行为 ConcreteState:具体的状态处理类 2. 示例 根据状态分离和选择行为 2.1 上下文 public class VoteContext { // 存放投票结果 private Map<String,String> resultMap = new HashMap<>(); // 存放投票次数 private Map&原创 2021-05-06 10:04:07 · 128 阅读 · 0 评论 -
观察者模式
1. 类图 Subject:目标对象 一个目标可以被多个观察者观察 目标提供观察者订阅和取消的维护 目标对象发生变化,通知所有有效观察者 Observer:定义观察者接口,提供目标对象变化时,对应观察者的更新方法 ConcreteObserver:具体观察者实现 ConcreteSubject:具体目标对象实现 2. 示例 修改目标的数据,触发相应通知,联动调用观察者的方法 2.1 目标对象 知道所有的观察者,并提供和维护观察者的订阅与退订逻辑 public clas原创 2021-05-06 10:03:38 · 114 阅读 · 0 评论 -
备忘录模式
1. 类图 Memento:备忘录。存储原发器对象的内部状态 Orginator:原发器。使用备忘录来保存某个时刻原发器自身的状态 Caretaker:备忘录管理者。保存备忘录对象 2. 示例 保存和恢复内部状态 2.1 备忘录 // 备忘录接口 public interface Memento {} // 实现类 blod保存原发器信息 public class MementoImpl implements Memento { private int blod;原创 2021-05-06 10:03:20 · 111 阅读 · 0 评论 -
享元模式
1. 类图 Flyweight:享元接口 ConcreteFlyweight:享元实现对象 UnsharedConcreteFlyweight:非共享享元实现对象 FlyweightFactory:享元工厂 Client:客户端 2. 示例 同一对象实例的重复使用 2.1 享元接口 public interface FlyWeight { void action(); } 2.2 享元实现对象 public class ChildFlyWeight implement原创 2021-05-06 10:02:30 · 98 阅读 · 0 评论 -
外观模式
1. 类图 2. 示例 封装交互,简化调用 2.1 内部对象 public class CPU { public void start(){System.out.println("cpu启动");} public void shutDown(){System.out.println("cpu关闭");} } public class Disk { public void start(){System.out.println("disk启动");} pu原创 2021-05-06 10:01:22 · 98 阅读 · 0 评论 -
桥接模式
1. 类图 Abstraction:抽象部分的接口。维护一个实现部分的对象引用,抽象对象里面的方法,需要调用实现部分的对象来完成 RefinedAbstraction:扩展抽象部分的接口。定义跟实际业务相关的方法,这些方法通常使用Abstraction中定义的方法,也可能需要调用实现部分的对象来完成 Implementor:定义实现部分的接口。 ConcreteImplementor:实现Implementor接口的对象 2. 示例 2.1 接口 public interface Co原创 2021-05-06 10:02:01 · 90 阅读 · 0 评论 -
适配器模式
1. 类图 Target:客户端需要的功能接口 Adaptee:需要被适配的接口 Adapter:适配器,将Adaptee适配成客户端需要的Target Client:客户端,调用功能接口Target 2. 示例 2.1 默认适配器 减少子类重写的方法 2.1.1 接口 // 默认适配接口 public interface DefaultAdapter { public void testOne(); public void testTwo(); publi原创 2021-05-05 10:30:10 · 162 阅读 · 0 评论 -
装饰器模式
1. 类图 Component:组件对象的接口,可以给这些对象动态地添加职责 ConcreteComponent:具体的组件对象,实现组件对象接口,通常就是被装饰器装饰的原始对象,可以给这个对象添加职责 Decorator:所有装饰器的抽象父类,需要定义一个与组件接口一致,并持有一个Component对象,即被装饰的对象 2. 示例 动态地给一个对象添加一些额外的职责 2.1 组件接口 public interface Person { void eat(); } 2.2 组原创 2021-05-05 10:27:13 · 92 阅读 · 0 评论 -
代理模式
1. 类图 Proxy:代理对象 Subject:目标接口 RealSubject:具体的目标对象 2. 示例 2.1 静态代理 代理对象持有真实对象的引用,代理类和真实类实现共同的接口 2.1.1 目标接口 public interface Movie { void play(); } 2.1.2 目标对象 public class RealMovie implements Movie { public void play() {System.out.prin原创 2021-05-05 10:22:11 · 124 阅读 · 0 评论 -
单例模式
1. 类图 Singleton:负责创建Singleton类自己的唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例 2. 示例 2.1 懒汉式单例 /** * 饿汉式单例:初始化时直接创建 */ public class HungrySingleton { private static HungrySingleton hungrySingleton = new HungrySingleton(); private HungrySingleto原创 2021-05-05 10:18:13 · 89 阅读 · 0 评论 -
原型模式
1. 类图 Protoype:声明一个克隆自身的接口,用来约束想要克隆自己的类,要求它们都要实现这里定义的克隆方法 ConcretePrototype:实现Prototype接口的类,这些类真正实现了克隆自身的功能 Client:客户端,先获取原型实例对象,然后通过原型实例克隆自身来创建新的对象实例 2. 示例 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象 浅克隆:只负责克隆按值传递的数据 深克隆:包括浅克隆和引用类型的数据 2.1 原型类 public class原创 2021-05-05 10:16:36 · 127 阅读 · 0 评论 -
建造者模式
1. 类图 Builder:创造者接口,定义创建一个Product对象所需要的各个部件的操作 ConcreteBuilder:具体的创造者实现,创建各个部件并进行组装,同时还提供一个让用户获取组装完成后的产品对象的方法 Director:指挥者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象 Product:具体产品,包含多个部件 2. 示例 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2.1 创建者接口 public原创 2021-05-05 10:15:27 · 141 阅读 · 0 评论 -
抽象工厂模式
1. 类图 Abstract Factory:抽象工厂,定义创建一系列产品对象的操作接口 Concrete Factory:具体的工厂,定义抽象工厂定义的方法,具体实现一系列产品对象的创建 Abstract Product:定义一类产品对象的接口 Concrete Product:具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象 Client:客户端,使用抽象工厂来获取一系列所需要的的产品对象,然后面向这些产品对象的接口编程,以原创 2021-05-05 10:13:28 · 103 阅读 · 0 评论 -
工厂方法模式
1. 类图 Product:实际需要使用的对象的接口 ConcreteProduct:具体的Product接口的实现对象 Creator:创建器,多是抽象方法。可以在Creator里面提供工厂方法的默认实现,让工厂方法返回一个缺省的Product类型的实例对象 ConcreteCreator:具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例 2. 示例 通过各自的工厂获取对象 2.1 工厂接口 public interface IFactory原创 2021-05-05 10:11:44 · 103 阅读 · 0 评论 -
简单工厂模式
1. 类图 Api:功能接口 ImplA、ImplB:Api接口的实现类 Factory:工厂,选择合适的实现类来创建Api接口对象 Client:客户端,通过Factory获取Api接口对象,然后面向Api接口编程 2. 示例 通过工厂类的静态方法获取对象 2.1 功能接口 public abstract class Operation { Integer numberA; Integer numberB; public void setNum.原创 2021-05-05 10:08:05 · 99 阅读 · 0 评论 -
设计原则&UML
1. 设计原则 目录 1. 设计原则 1.1 单一职责 1.2 里氏替换 1.3 依赖倒置 1.4 接口隔离 1.5 迪米特原则 1.6 开闭原则 2. 设计模式 2.1 创建型 2.2 结构型 2.3 行为型 3. UML 3.1 类图 3.2 关系 1.1 单一职责 一个类只负责一项职责 问题由来:类T负责两个不同的职责:P1、P2。当P1需求发生变化时,需要修改T类,可能导致P2发生故障 解决方案:将P1、P2放在两个类:T1、T2 1.2 里氏替换 所有引用基原创 2021-05-05 10:00:47 · 361 阅读 · 0 评论
分享