![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
KeithRong
这个作者很懒,什么都没留下…
展开
-
解释器模式
1. 定义 是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式) 2. 代码 场景:实现四则运算 先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复 再分别输入 a ,b, c, d, e 的值 最后求出结果 abstract class Expression { // key: 表达式参数 例 a,b,c /...原创 2020-02-25 10:18:30 · 214 阅读 · 0 评论 -
备忘录模式
1. 定义 在不破坏封装性的前提下,捕获 一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 2. 代码 场景:游戏角色有血量和魔法,在大战 Boss 前保存自身的状态(血量和魔法),当大战 Boss 后血量和魔法下降,从备忘录对象恢复到大战前的状态。 // 守护者对象,保存游戏角色的状态 class Caretaker { private Memento...原创 2020-02-25 09:04:14 · 132 阅读 · 0 评论 -
中介者模式
1. 定义 用一个 中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 2. 代码 场景:当闹铃响起时,电视开始播放;当电视关闭时,闹铃关闭。 class Mediator { private Map<String, Colleague> colleagueMap; private Map<S...原创 2020-02-25 08:48:01 · 90 阅读 · 0 评论 -
迭代器模式
1. 定义 如果我们的集合元素是用不同的方式实现的,有数组,还有 java 的集合类,或者还有其他方式,当客户端要遍 历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。 2. 代码 场景:展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。 @Data @AllArgsConstructor class Department{ pri...原创 2020-02-22 10:43:17 · 124 阅读 · 0 评论 -
访问者模式
1. 定义 封装了一些作用于某种数据结构的各元素的操作,可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 2. 代码 场景:观众有男生和女生,分别对歌手进行评价,有两个等级 – 好、差 abstract class Action{ public abstract void getManConclusion(Man man); public abstract void g...原创 2020-02-21 22:13:18 · 76 阅读 · 0 评论 -
命令模式
1. 定义 我们需要向某些对象发送请求,但不知道请求的接受者是谁,也不知道请求的操作是哪个。 只需在程序运行时指定具体请求接受者即可。 2. 代码 场景:使用遥控器控制电灯,遥控器有开、关、撤销 三个功能,而遥控器无需实现电灯的内部逻辑,通过组合的方式使电灯接收者实现,而电灯的接收者是通过客户端自己指定的。 interface Command{ void execute(); v...原创 2020-02-19 12:31:26 · 80 阅读 · 0 评论 -
状态模式
1. 定义 当一个 对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类 2. 代码 场景:一次抽奖有以下几种状态:不能抽奖,能抽奖,抽中发放奖品,奖品发完。那么每次抽奖都会有几率改变状态,图示如下。 代码实现 interface State { void deductMoney(); boolean raffle(); void dispensePr...原创 2020-02-13 14:57:27 · 108 阅读 · 0 评论 -
模板方法模式
1. 定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。 2. 代码 场景:制作豆浆的流程 添加配料 -> 打浆 -> 打包,通过添加不同的配料,可以制作出不同口味的豆浆。 abstract class SoyBeanMilk { public abstract void addMaterial();...原创 2020-02-08 12:59:05 · 156 阅读 · 0 评论 -
代理模式
1. 代理类的作用 可以通过不修改主业务逻辑的情况下,帮助主业务做功能增强。 Spring中的Aop底层就是动态代理。 2. 静态代理和动态代理 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 3. 静态代理实现 interface ClothFactory{ void...原创 2020-02-02 16:14:53 · 87 阅读 · 0 评论 -
门面模式/外观模式
1. 定义 为子系统中一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 2. 代码 场景:电脑开启需要一次开启Cpu、内存、磁盘。 class Cpu { public void start() { System.out.println("Cpu start"); } public void shutdow...原创 2020-02-08 12:13:06 · 173 阅读 · 0 评论 -
享元模式
1. 定义 运用共享技术有效地支持大量细粒度的对象 2. 代码 场景:不通过new的方式在地图上创建多个树 @Data class Tree { private final String name; private final String data; } @Getter class TreeNode { private int x; private int y;...原创 2020-02-08 10:56:02 · 127 阅读 · 0 评论 -
建造者模式
1. 定义 一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。 2. 代码 public class BuilderFactory{ public static void main(String[] args) { Outer outer = new Outer.Builder().withName("Ke...原创 2020-02-08 10:33:46 · 86 阅读 · 0 评论 -
组合模式
1. 定义 创建了对象组的树形结构,将对象组合成树状结构以表示"整体-部分"的层次关系。 2. 代码 场景:大学下面有多个学院,学院下有多个部门,大学可以操作学院,学院可以操作部门。 @Data abstract class Organization{ private String name; public Organization(String name){ t...原创 2020-02-08 10:09:46 · 87 阅读 · 0 评论 -
装饰者模式
1. 定义 动态的将新功能附加到对象上 2. 代码 场景:星巴克点咖啡,点一杯咖啡和若干配料,并计算总价 abstract class Goods { private String description; private float price = 0.0f; public abstract float cost(); // 价格 public Stri...原创 2020-02-08 09:35:51 · 122 阅读 · 0 评论 -
桥接模式
1. 定义 将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变 2. 代码 场景:有品牌Vivo、小米,有类型折叠式、滑盖式,一个手机3个操作:打开、关闭、打电话。 每个品牌的每种类型操作是不同的,这个时候可以用到桥接模式来解决。 interface Brand { void open(); void close(); void call(); } class...原创 2020-02-08 09:21:12 · 85 阅读 · 0 评论 -
简单工厂设计模式
1. 定义 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 2. 代码 场景:客户订披萨,只需要告诉工厂披萨的种类,不需要关系披萨的制作过程 abstract class Pizza{ String name; public abstract void prepare(); public void bake(){ System.out.prin...原创 2020-02-08 09:08:32 · 61 阅读 · 0 评论 -
适配器模式
1. 定义 将一个类的接口转换成另一个种接口,让原本接口不兼容的类可以兼容。 2. 代码 场景:手机充电需要5V电压,所以需要将220V电压转换为5V电压 public class AdapterDemo { static public class Voltage220 { public int output220(){ int src = 220;...原创 2020-02-07 17:21:39 · 80 阅读 · 0 评论 -
责任链模式
1. 定义 责任链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 2. 代码 abstract class Audit { protected Audit audit; protected String name; public Audit(String name){ this....原创 2020-02-07 17:13:31 · 79 阅读 · 0 评论 -
观察者模式
1. 定义 对象之间多对一依赖的一种设计方案,被依赖的对象为 Subject,依赖的对象为 Observer,Subject,通知 Observer 变化。 2. 代码 场景:孩子醒来哭,父亲,母亲,狗都会做出各自的反应。 interface Observer { void actionOnWakeup(WakeupEvent event); } class Dad implements...原创 2020-02-07 17:07:53 · 85 阅读 · 0 评论 -
单例设计模式
1. 饿汉式 public class Singleton1 { public static final Singleton1 INSTANCE = new Singleton1(); private Singleton1(){ } } public enum Singleton{ INSTANCE } 2. 懒汉式 public class Singleto...原创 2020-02-07 10:12:14 · 89 阅读 · 0 评论