2024.09.11 | cuithink | 851次围观
将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。适配器模式的主要作用就是把原本不兼容的接口,通过适配修改做到统一,使得用户方便使用,就想我们提到的万能充 多接口数据线等待, 他们都是为了适配各种不同的接口做的兼容。
适配器模式(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号
发表评论