基本模式
网关
入口对象是对外部系统或资源访问的封装
- 封装外部资源,创建一个简单的API
网关模式可以是简单的接口转发,与外观模式不同的是,外观接口通常由服务端提供,具有通用性
映射器
在两个独立的对象之间的中间层
主要是在两个子系统之间建立通信,并且不被子系统所感知
要达到这样的目的,需要监听子系统的通信请求
层超类型
某一类型充当一层中所有类型的超类型
当一层中的所有对象都具有共同的一些特性时,这些特性就可以被抽取成超类代码
- 是不是一种继承滥用?
分离接口
在与接口定义分离的地方实现该接口
这种模式在微服务的服务间接口很常被用到
parent
|- order-service
|-- order-service-api
|-- order-service-impl
注册表
- 在Spring大行其道的时代,这个模式似乎过时了
一个全局可见的对象,其他对象可以通过此对象获得
- 可以使用单例模式
但当增加一种新类型时,注册表必须被修改
但也可以使用隐式注册表,只是会失去编译时检查的优点
值对象
小而简单的对象,一旦创建字段就不可修改,判等时不依据标识ID
货币
表示一个货币值的对象
- 封装屏蔽不同币种及精度丢失问题
特殊情况(Null Object)
提供特殊行为的子类
- 主要是为了避免针对特殊情况进行编程而引入的
Person getUser(String id) {
// ...
// if not found
return Person.EMPTY
}
插件
通过配置来连接类,在运行时决定实际的实现类,可以使用工厂模式动态化对象的创建过程
像Spring的条件化注入就是一种插件的实现手段
@CondtionalOnProperties(...)
class DevService implements Service{...}
@CondtionalOnProperties(...)
class ProdService implements Service{...}
服务桩
在测试时mock外部服务,其实就是插件的一种具化形式,通过提供一个统一接口,隔离生产环境与开发环境实际调用的接口
记录集
JDBC中的 ResultSet
表格数据在内存的表现形式
- 离线记录集