Chain of Responsibility, Command and Iterator, Mediator, Memento
1. Chain of Responsibility
当程序需要使用不同方式处理不同种类请求, 而且请求类型和顺序预先未知时, 可以使用责任链模式。当必须按顺序执行多个处理者时, 可以使用该模式。如果所需处理者及其顺序必须在运行时进行改变, 可以使用责任链模式。
- AuthService
- AuthController
重写后
- imp
- Level1AuthLink.jav
- Level2AuthLink.jav
- Level3AuthLink.java
- AuthInfo.java
- AuthLink.java
⼀般在使⽤责任链时候如果是场景⽐较固定,可以通过写死到代码中进⾏初始化。但如果业务场景 经常变化可以做成xml配置的⽅式进⾏处理,也可以落到库⾥进⾏初始化操作
测试类
AuthLink new 一个新类,里面包含了三级人员信息
AuthService.auth模拟审批
2. Command
通过操作来参数化对象,将操作放入队列中、 操作的执行或者远程执行操作, 可使用命令模式,实现操作回滚功
比如点菜,根据客户不同需求服务员传递给厨师。
避免一堆的if else
- result
- impl
- A
- B
- C
- IRes
- impl
- require
- impl
- AReq
- BReq
- CReq
- IRequire
- impl
- Commander
3. Iterator
当集合背后为复杂的数据结构, 且你希望对客户端隐藏其复杂性时 (出于使用便利性或安全性的考虑), 可以使用迭代器模式,
- group
- Employee.java
- GroupStructure.java
- Link.java
- lang
- Collection.java
- Iterable.java
- Iterator.java
4. Mediator
当一些对象和其他对象紧密耦合以致难以对其进行修改时, 可使用中介者模式, 当组件因过于依赖其他组件而无法在不同应用中复用时,如果为了能在不同情景下复用一些基本行为, 导致你需要被迫创建大量组件子类时, 可使用中介者模式。
Mysql和Oracle都是数据库层, ORM框架就是中介,再到不同的应用
比如只用了一个JDBCUtil时候,直接操作数据库,用中介模式开发ORM
-
dao
- ISchool.java
- IUserDao.java
-
mediator
-
Configuration.java
-
SqlSession.java
- DefaultSqlSession.java
- SqlSessionFactory.java
- DefaultSqlSessionFactory.java
- SqlSessionFactoryBuilder.java
-
- Resources.java
通过中介者模式的设计思想⼿写⼀个ORM框架,隐去了对数据库操作的复杂度,让外 部的调⽤⽅可以⾮常简单的进⾏操作数据库。这也是平常使⽤的 Mybatis 的原型,在⽇ 常的开发使⽤中,只需要按照配置即可⾮常简单的操作数据库。
还有服务接⼝的包装也可以使⽤中介者模式来实现。可以把这些奖品接⼝统⼀收到中台开发⼀个奖品 中⼼,对外提供服务。
- po
- School.java
- User.java
中介者模式模型结构
以上是对ORM框架实现的核⼼类,包括了;加载配置⽂件、对xml解析、获取数据库session、操
作数据库以及结果返回。
左上是对数据库的定义和处理,基本包括我们常⽤的⽅法;
5. Memento
对象快照,数据安全性
old:
- Admin
- ConfigFile
- ConfigMemento : 备忘录类,相当于是对原有配置类的扩展
- ConfigOriginator :记录者类,获取和返回备忘录类对象信息
admin逻辑: new一个admin,ConfigOriginator记录着
configOriginator.setConfigFile,记录一个版本号 admin.append(ConfigOriginator.saveMemento())
回滚 configOriginator.getMemento(admin.undo())