标签:对象 创建 适配器 接口 本体 熟悉 简单 模式 设计模式
寻找到底用的什么 设计模式
目录
寻找到底用的什么 设计模式 1
1. 背景 1
1.1. 海超写的es,在枚举里面完成了各个方法的调用.感觉很厉害 看下 1
2. 先熟悉下23中设计模式 1
2.1. 大体上分为三类: 创建型,结构型和行为型 1
2.2. 创建型 1
2.2.1. 1.单例 1
2.2.2. 2.原型模式 1
2.2.3. 3.简单工厂 2
2.2.4. 4.工厂方法 2
2.2.5. 5.抽象工厂 2
2.2.6. 6.建造者 2
2.3. 结构型 2
2.3.1. 代理模式 2
2.3.2. 适配器模式 3
2.3.3. 桥接模式 5
2.3.4. 装饰者模式 6
2.3.5. 外观模式 8
背景
同事写的es,在枚举里面完成了各个方法的调用.感觉很厉害 所以熟悉下设计模式.
注: 此文写于2020年..
先熟悉下23中设计模式
大体上分为三类: 创建型,结构型和行为型
创建型
1.单例
一个类只创建一个实例. 字面意思.
2.原型模式
用类提供的clone方法, 快速复制一个对象出来,速度快,效率高. 用的是内存二进制流.所以快.
3.简单工厂
一个工厂类直接new对象出来.
4.工厂方法
多个工厂类头上都挂个接口出来,生产一个层级的产品(对象); 多态特性具体用哪个工厂.
5.抽象工厂
多个工厂类头上都挂个接口出来,生产多个层级产品(对象);
对于4和5的区别. 奔驰工厂类, suv车型生产接口 , 拼到一块就是 奔驰工厂生产suv车型 . 4就是很单一的生产一种suv车型. 工厂可以是宝马厂,可以是奔驰厂. 5就是可以再生产二厢车车型,拼在一起就是宝马厂可以生产suv,也可以生产二厢车. 其他厂同理 .
6.建造者
创建复杂对象时使用, 一个对象由多个对象组成,其他对象创建完成 ,才能创建目标对象. 有次序.
抽象接口包含各个对象的创建方式. 比如目标对象D, 由A,B,C组成 ,那么抽象接口就包含了A,B,C的创建方法和D的组装方式. 5,6的区别; 抽象工厂一次创建一个对象; 建造者一次创建多个对象,多个对象再次操作完成真正对象创建. 抽象工厂关注的是创建一个对象出来; 建造者关注的是不单单是创建对象,还要完成组件,这才是建造者.
结构型
代理模式
理解
代理对象代理了真实对象 ,本质是为了增强.
将真实对象的方法抽取到接口里面, 代理类实现改接口 , 代理类引入真实对象, 完成真实对象的增强.
这个模式一般也是为了增强真实对象,在原代码逻辑上增加一些代码逻辑.
比如: 我打人, 打人之前要先洗手, 打人后要跑路. 那么我创建代理对象, 先洗手,然后打人,然后跑路.
代码
本体和接口
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154754028-1623838622.png)
代理类. 注意,代理类内部已经完成了一切
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
客户端调用方式
适配器模式
适配器对象, 真实对象 ,本质是为了统一接口.
不同真实对象调用同一个接口还能输出自己的内容.
玩法: 定义接口,适配器对象实现接口 , 并引入真实对象, 适配器里的实现方法里面放入真实对象的方法.
比如: 光能汽车(真实对象)使用光源驱动(m1), 电能汽车使用电能驱动(m2), 现在要求统一用m方法. 也是创建一个适配器对象. 然后用适配器对象直接调用m方法
代码:
本体和要统一的接口
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
做俩适配器
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
客户端实现
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
注意: 这个有两种实现方式, 一种是类结构组装,一种是接口结构组装 . 上面说的是接口组装. 如果是类组装, 那么需要适配器继承真实对象实现接口 ,也能完成.
桥接模式
理解: 就是嫁接. 本体已经完成了,但是现在可能还要加点. 本体变胖了
定义: 抽象和实现分离 . 用组合替代继承关系. 注意抽象化的就是要加的内容 .实现的就是本体内容
做法: 定义本体接口1 ,定义实现接口类2, 完成前三步的组装,创建完整本体类3,同时要带上扩展的抽象类4, 抽象类继承类5 . 一共5个.
代码
demo: 女士皮包,按用途分可选钱包(Wallet)和挎包(HandBag),按颜色分可选黄色(Yellow)和红色(Red) . 本体是带颜色的,后续我要加上用途.
构建本体
完成扩展.
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
实现调用
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
装饰者模式
要点:本体是真的变身了. 我是我,变身是变身
理解: 本体到真正的变身,有个中间过程 ,这个就认为是抽象装饰类.
定义: 在不改变对象结构的情况下,动态的给该对象增加一些职责
结构:
本体接口,本体类,抽象装饰类(插入本体类),具体装饰类
demo: 本体变身美少女和女妖
本体接口
子主题
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
本体类.
子主题
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
抽象装饰类
子主题
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
美少女具体装饰
子主题
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
女妖具体装饰
客户端调用
子主题
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
对比桥接模式: 装饰者和本地完全不同了. 但是桥接模式, 本体自带了扩展,本体改变.
外观模式
理解: 就跟政务大厅一样,各个部门都在这里.比较简单
定义: 又叫门面模式,为复杂的系统提供一个一致的接口,而使这些子系统更加容易被访问.
做法: 创建外观类,创建子系统.
特点: 注意,是一次全部把子系统调用完.
代码:
外观类
子主题
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
子系统
子主题
![image](/i/l/?n=23&i=blog/2426785/202302/2426785-20230225154753992-1285838989.png)
标签:对象,
创建,
适配器,
接口,
本体,
熟悉,
简单,
模式,
设计模式
From: https://www.cnblogs.com/do-mybest/p/17154580.html