2024.09.11 | cuithink | 1747次围观
将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。适配器模式的主要作用就是把原本不兼容的接口,通过适配修改做到统一,使得用户方便使用,就想我们提到的万能充 多接口数据线等待, 他们都是为了适配各种不同的接口做的兼容。
适配器模式(Adapter)包含以下主要角色:
目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
适配者(Adaptee)类:适配者即被适配的角色,它是被访问和适配的现存组件库中的组件接口。
适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
适配器模式分为类适配器和对象适配器,两者的区别在于: 适配器与适配者的关系, 类适配器是继承关系, 对象适配器是聚合关系,根据设计原则,聚合优先于继承,应该多选用对象适配器.
实际开发中的使用
为了提升系统的速度,将一些数据以K-V 形式缓存在内存中,平台提供get,put,remove等API以及相关的管理机制.
功能实现的迭代过程,从HashMap到Memcached再到Redis,要确保后面再增加新的缓存组件时,根据配置文件能够实现自由的切换,并且还要符合开闭原则。
(1) 首先定义一个缓存接口,包含get、put、remove等操作方法。例如:
public interface Cache {
void put(String key, Object value);
Object get(String key);
void remove(String key);
}(2) 然后实现该接口的三个适配器,分别对应HashMap、Memcached、Redis三种缓存方案。例如
public class HashMapCacheAdapter implements Cache {
private Map<String, Object> cache = new HashMap<>();
@Override
public void put(String key, Object value) {
cache.put(key, value);
}
@Override
public Object get(String key) {
return cache.get(key);
}
@Override
public void remove(String key) {
cache.remove(key);
}
}
//...省略其他类(3)使用时,只需要调用工厂类的createCacheAdapter方法,传入缓存类型即可获取相应的缓存适配器。例如
Cache cache = CacheAdapterFactory.createCacheAdapter("Redis");
cache.put("key", "value");
Object result = cache.get("key");
cache.remove("key");适配器模式适用的场景
统一多个类的接口
原有接口无法修改时候,但是有需要兼容的时候
粤ICP备16076548号

发表评论