设计模式
2020-06-17 11:35:14 0 举报
AI智能生成
设计模式(包含笔记链接)
作者其他创作
大纲/内容
结构型设计模式
7.装饰模式(Decorator)
装饰器的角色
抽象物体:Tank项目中的GameObject
实际物体:Tank项目中的Tank和Bullet等,继承自GameObject
抽象装饰:Tank项目中的GameObjectDecorator,也让他继承GameObject
实际装饰:Tank项目中的RectDecorator(给物体加方形边框),让他继承自抽象装饰
10.组合模式(Composite)
树状结构专用模式
组合模式的角色
抽象节点类
包含子节点的节点类
不包含子节点的节点类
11.享元模式(Flyweight)
思想:重复利用对象
享元模式的角色
抽象享元类
具体享元类
享元池类:包含抽象享元集合
12.代理模式(Proxy)
静态代理
静态代理的角色
抽象主题:Moveable接口(可移动的物品)
实际主题:Tank类(实现move方法)
代理类:TankLogProxy(持有一个Moveable引用)
动态代理
jdk自带的动态代理(被代理类必须实现某接口)
Movable接口
Tank类
使用Proxy.newProxyInstance()方法生成代理对象
cglib方式(被代理类不能被final修饰)
Tank类
使用Enhancer设置父类,设置增强方法
16.适配器模式(Adapter)
适配器的角色
目标接口
适配者
适配器
适配器分类
类适配器:适配器继承适配者,实现目标接口
对象适配器:适配器持有适配者,实现目标接口
接口适配器:空实现接口,让用户只重写自己需要的方法
17.桥接模式(Bridge)
桥接模式的角色
抽象化角色:学科
扩展抽象化角色:数学、语文
实现化角色:年级
具体实现化角色:一年级、二年级
创建型设计模式
1.单例模式(Singleton)
饿汉式(静态常量) - 可以使用,可能会内存浪费
饿汉式(静态代码块) - 可以使用,可能会内存浪费
懒汉式(线程不安全) - 不能使用
懒汉式(线程安全,同步方法) - 不推荐使用
懒汉式(线程不安全,同步代码块) - 不能使用
双重检查 - 推荐使用
静态内部类 - 推荐使用
枚举 - 推荐使用
简单工厂模式(Simple Factory)
简单工厂的角色
抽象产品类:披萨抽象类
多个具体产品类:希腊披萨,胡椒披萨等
一个简单工厂:包含一个创建产品方法(根据不同参数返回不同对象)
3.工厂方法模式(Factory Method)
工厂方法的角色
一个抽象工厂类:提供生产披萨的抽象工厂
多个具体工厂:希腊披萨工厂,胡椒披萨工厂等
一个抽象产品:披萨抽象类
多个具体产品:希腊披萨,胡椒披萨等
4.抽象工程模式(Abstract Factory)
抽象工厂的角色
多个抽象产品:此处为一个产品的不同维度(披萨的地区和口味)
多个具体产品:北京奶酪披萨,北京胡椒披萨,伦敦奶酪披萨,伦敦胡椒披萨
一个抽象工厂:包含两个创建产品方法(北京和伦敦口味)
多个具体工厂:奶酪披萨工厂和胡椒披萨工厂
15.建造者模式(builder)
构建复杂对象
建造者模式的角色
产品:房子
抽象建造者
具体建造者:普通建造者、高楼建造者
指挥者
19.原型模式(prototype)
java自带原型模式
实现 Cloneable 接口
重写 clone() 方法
对象中包含引用类型,需要深拷贝
行为型设计模式
2.策略模式(Strategy)
策略模式的角色
环境类:持有策略接口的引用,可以根据不同实现类-根据不同策略获取id
策略接口:生成id策略
雪花策略:雪花算法生成id
递增策略:递增算法生成id
JDK中的public interface Comparator<T>
5.调停者(Mediator)又叫中介者模式
调停者的角色
抽象同事类:Tank项目中的GameObject
具体同事类:Tank项目中的坦克,子弹,爆炸,墙等
抽象中介者:Tank项目没用到,可以将具体中介者中方法抽象,形成抽象中介者
具体中介者:Tank项目中的GameModel。定义一个List管理同事,协调各同事之间的交互
6.门面模式(Facade)
Tank项目从TankFrame角度看,GameModel就是门面
8.责任链模式(Chain Of Responsibility)
Tank项目中的例子,类似servlet的filter
抽象处理者
Tank项目中的Collider碰撞器接口
Tank项目中的ColliderChain类,包含一个List和add方法,实现了Collider接口
具体处理者:Tank项目中的【TankTankCollider】【BulletTankCollider】等
客户类:创建一个ColliderChain,直接调用ColliderChain的collider(o1,o2)方法
责任链的角色
抽象处理者:定义一个处理请求的接口,包含抽象处理方法和一个后继连接
具体处理者:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
客户类角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
9.观察者模式(Observer)
观察者的角色
事件:哭、睡觉
事件源:孩子
抽象观察者:看孩子的
具体观察者:父亲、狗
观察者的应用
Observer(观察者)
Listener(监听器)
Hook(钩子函数)
Callback(回调函数)
13.迭代器模式(Iterator)
使用场景:容器与容器遍历
迭代器的角色
抽象容器:MyCollection
具体容器:MyArrayList
抽象迭代器:MyItertor
具体迭代器:MyListIterator
14.访问者模式(Visitor)
常见使用场景:编译器
访问者的角色
抽象访问者:购买电脑的用户
具体访问者:个人用户、企业用户
抽象元素:电脑组件
具体元素:cpu、memory
对象结构:电脑
18.命令模式(Command)
命令模式的角色
抽象命令类:控制灯的命令
具体命令:开灯、关灯
实现者/接收者
调用者/请求者
20.备忘录模式(Memento)
备忘录的角色
发起人
备忘录
管理者
21.模板方法(TemplateMethod)
抽象类(一个模板方法调用其他抽象方法)
具体子类(实现了抽象方法)
22.状态模式(State)
状态模式的角色
环境类
抽象状态
具体状态
23.解释器模式(Intepreter)
常用场景:用于解释脚本语言
不常用,无需掌握
0 条评论
下一页