目录
Adapter 适配器模式
目录
[TOC]
1. 概述
1.1. Head First设计模式定义
将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。
1.2. 自我理解
由于现在技术选型越来越多,比如说数据存储方面:传统的MySQL、Oracle及现在的大数据框架HBase、ElasticSearch、Redis等。
各个框架的增删改查的API是各不一样。 然后开发人员或许对大数据框架不熟悉,操作起来极不方便,这时可以用适配器来封装。
开发人员无需知道底层的具体增删改查操作,只需调用对应封装的方法即可。
例如下面的MySQL、HBase、Redis的增删改查都不一样,但是如果我们自己封装增删改查为 add、delete、udpate、list,是不是就可以屏蔽底层的各个数据存储框架自己的API了。
MySQL | HBase | Redis | |
---|---|---|---|
插入 | insert | put | set |
删除 | delete | delete | del |
修改 | update | put | set |
查询 | select | get | get |
1.3. 迭代器的组成
Target: 目标类
Adaptee: 适应者,具体封装实现类;
Adapter: 适配器,能适配各种操作。
2. UML
3. Example
3.1. 场景
由于之前所有增量改查都走的MySQL,现在有了Redis内存框架,热点数据都走Redis,对于公司大部分人来说都是不熟悉该框架的,所以用适配器封装底层API。
3.2. Adapter设计模式的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/** * Created * Date: 2021/06/08 13:24 <br/> * Description: 适配器设计模式 * @author jomin@loserzhao.com * @see */ public class AdapterPatternDemo { static Map<Long, String> dataset = new HashMap<Long, String>(); public static void main(String[] args) { Target adapter = new Adapter(new RedisAdaptee()); adapter.save(1L,"zhangsan"); System.out.println(adapter.get(1L)); } interface Target { void save(Long id, String str); String get(Long id); } /** * Author: jomin@loserzhao.com <br/> * Date: 13:37 2021-06-08 <br/> * Description: Redis 适应者 */ static class RedisAdaptee { public void set(Long id, String str) { dataset.put(id, str); System.out.println("Redis save [" + str + "] done!"); } public String get(Long id){ return dataset.get(id); } } static class Adapter implements Target { private RedisAdaptee adaptee; public Adapter(RedisAdaptee adaptee) { this.adaptee = adaptee; } public void save(Long id, String str) { adaptee.set(id, str); } public String get(Long id){ return adaptee.get(id); } } } |
原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]
本文链接地址: http://www.loserzhao.com/java/designpattern/adapter-designpattern.html
文章的脚注信息由WordPress的wp-posturl插件自动生成
0 条评论。