![](https://img-blog.csdnimg.cn/20210419165440637.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
在特定环境下,针对重复出现的特定问题解决方案
HeloJ
这个作者很懒,什么都没留下…
展开
-
职责链模式
1. 类图Handler:定义职责的接口,通常定义处理请求的方法,可以在此处实现后继链 ConcreteHandler:实现职责的类,对职责范围内请求的处理,对职责范围外请求的转发 Client:客户端,向链上的具体处理对象提交请求,让职责链负责处理2. 示例分离职责,动态组合2.1 职责接口public abstract class Handler { // 持有后继的职责对象 protected Handler handler; public v原创 2021-05-07 21:10:12 · 49 阅读 · 0 评论 -
命令模式
1. 类图Command:命令接口,声明执行的方法 ConcreteCommand:命令接口实现,持有并调用接收者的功能 Receiver:接收者,执行命令的对象 Invoker:要求命令对象执行请求,通常持有命令对象 Client:创建具体的命令对象,并设置命令对象的接收者2. 示例将请求封装成对象2.1 命令接口public interface Command { void execute();}2.2 命令实现持有命令真正执行的对象pub原创 2021-05-07 21:09:56 · 51 阅读 · 0 评论 -
解释器模式
1. 类图AbstractExpression:解释器接口 TerminalExpression:终结符解释器,解析句子的结束符 NonterminalExpression:非终结符解释器,用来实现语法规则中非终结符相关的操作。可以有多种非终结符解释器 Context:上下文,通常包含各个解释器需要的数据或是公共的功能 Client:使用解释器的客户端,按照语言的语法表达式转换成使用解释器对象描述的抽象语法树,然后调用解释操作2. 示例解释器对给定语法的句子进行解析对字符串1原创 2021-05-07 21:09:31 · 55 阅读 · 0 评论 -
迭代器模式
1. 类图Iterator:迭代器接口。定义访问和遍历元素的接口 ConcreteIterator:迭代器实现类。实现对聚合对象的遍历,并跟踪遍历时的当前位置 Aggregate:聚合对象。定义创建相应迭代器对象的接口 ConcreteAggregate:聚合对象实现。实现创建相应的迭代器对象2. 示例统一访问聚合元素的方法2.1 迭代器接口public interface Iterator { void first(); void next();原创 2021-05-07 21:09:09 · 43 阅读 · 0 评论 -
中介者模式
1. 类图Mediator:中介者接口。定义各个同事之间交互需要的方法 ConcreteMediator:中介者实现。了解和维护各个同事,并负责协调同事间的交互关系 Colleague:同事类父类,通常为抽象类。主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能 ConcreteColleague:具体的同事类,需要与其他同事通信时,就持有中介者通信2. 示例将多个对象之间的交互统一封装2.1 中介者接口public interface Mediator {原创 2021-05-06 10:05:24 · 59 阅读 · 0 评论 -
访问者模式
1. 类图Visitor:访问者接口,为所有访问者声明一个方法,用来代表对对象结构添加的功能 ConcreteVisitor:具体访问者,实现添加的功能 Element:元素对象,对象结构的顶层接口,定义接收访问的操作 ConcreteElement:具体元素对象,回调访问者的真实功能,开放自身的数据供访问者使用 ObjectStructure:对象结构,包含多个被访问的对象2. 示例为可能扩展的对象预留回路,通过回调的方式进行功能扩展,避免对对象的修改2.1 现有对象抽象类原创 2021-05-06 10:05:06 · 79 阅读 · 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 · 42 阅读 · 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 · 46 阅读 · 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 · 57 阅读 · 0 评论 -
观察者模式
1. 类图Subject:目标对象 一个目标可以被多个观察者观察 目标提供观察者订阅和取消的维护 目标对象发生变化,通知所有有效观察者 Observer:定义观察者接口,提供目标对象变化时,对应观察者的更新方法 ConcreteObserver:具体观察者实现 ConcreteSubject:具体目标对象实现2. 示例修改目标的数据,触发相应通知,联动调用观察者的方法2.1 目标对象知道所有的观察者,并提供和维护观察者的订阅与退订逻辑public clas原创 2021-05-06 10:03:38 · 57 阅读 · 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 · 50 阅读 · 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 · 41 阅读 · 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 · 41 阅读 · 0 评论 -
桥接模式
1. 类图Abstraction:抽象部分的接口。维护一个实现部分的对象引用,抽象对象里面的方法,需要调用实现部分的对象来完成 RefinedAbstraction:扩展抽象部分的接口。定义跟实际业务相关的方法,这些方法通常使用Abstraction中定义的方法,也可能需要调用实现部分的对象来完成 Implementor:定义实现部分的接口。 ConcreteImplementor:实现Implementor接口的对象2. 示例2.1 接口public interface Co原创 2021-05-06 10:02:01 · 42 阅读 · 0 评论 -
适配器模式
1. 类图Target:客户端需要的功能接口 Adaptee:需要被适配的接口 Adapter:适配器,将Adaptee适配成客户端需要的Target Client:客户端,调用功能接口Target2. 示例2.1 默认适配器减少子类重写的方法2.1.1 接口// 默认适配接口public interface DefaultAdapter { public void testOne(); public void testTwo(); publi原创 2021-05-05 10:30:10 · 91 阅读 · 0 评论 -
装饰器模式
1. 类图Component:组件对象的接口,可以给这些对象动态地添加职责 ConcreteComponent:具体的组件对象,实现组件对象接口,通常就是被装饰器装饰的原始对象,可以给这个对象添加职责 Decorator:所有装饰器的抽象父类,需要定义一个与组件接口一致,并持有一个Component对象,即被装饰的对象2. 示例动态地给一个对象添加一些额外的职责2.1 组件接口public interface Person { void eat();}2.2 组原创 2021-05-05 10:27:13 · 45 阅读 · 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 · 76 阅读 · 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 · 38 阅读 · 0 评论 -
原型模式
1. 类图Protoype:声明一个克隆自身的接口,用来约束想要克隆自己的类,要求它们都要实现这里定义的克隆方法 ConcretePrototype:实现Prototype接口的类,这些类真正实现了克隆自身的功能 Client:客户端,先获取原型实例对象,然后通过原型实例克隆自身来创建新的对象实例2. 示例用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象浅克隆:只负责克隆按值传递的数据深克隆:包括浅克隆和引用类型的数据2.1 原型类public class原创 2021-05-05 10:16:36 · 67 阅读 · 0 评论 -
建造者模式
1. 类图Builder:创造者接口,定义创建一个Product对象所需要的各个部件的操作 ConcreteBuilder:具体的创造者实现,创建各个部件并进行组装,同时还提供一个让用户获取组装完成后的产品对象的方法 Director:指挥者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象 Product:具体产品,包含多个部件2. 示例将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示2.1 创建者接口public原创 2021-05-05 10:15:27 · 74 阅读 · 0 评论 -
抽象工厂模式
1. 类图Abstract Factory:抽象工厂,定义创建一系列产品对象的操作接口 Concrete Factory:具体的工厂,定义抽象工厂定义的方法,具体实现一系列产品对象的创建 Abstract Product:定义一类产品对象的接口 Concrete Product:具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象 Client:客户端,使用抽象工厂来获取一系列所需要的的产品对象,然后面向这些产品对象的接口编程,以原创 2021-05-05 10:13:28 · 53 阅读 · 0 评论 -
工厂方法模式
1. 类图Product:实际需要使用的对象的接口 ConcreteProduct:具体的Product接口的实现对象 Creator:创建器,多是抽象方法。可以在Creator里面提供工厂方法的默认实现,让工厂方法返回一个缺省的Product类型的实例对象 ConcreteCreator:具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例2. 示例通过各自的工厂获取对象2.1 工厂接口public interface IFactory原创 2021-05-05 10:11:44 · 47 阅读 · 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 · 40 阅读 · 0 评论 -
设计原则&UML
1. 设计原则目录1. 设计原则1.1 单一职责1.2 里氏替换1.3 依赖倒置1.4 接口隔离1.5 迪米特原则1.6 开闭原则2. 设计模式2.1 创建型2.2 结构型2.3 行为型3. UML3.1 类图3.2 关系1.1 单一职责一个类只负责一项职责问题由来:类T负责两个不同的职责:P1、P2。当P1需求发生变化时,需要修改T类,可能导致P2发生故障 解决方案:将P1、P2放在两个类:T1、T21.2 里氏替换所有引用基原创 2021-05-05 10:00:47 · 239 阅读 · 0 评论