设计模式 | 适配器模式(adapter)
定义:
结构:(书中图,侵删)

实例:
- package designpattern.adapter;
- import java.util.HashSet;
- import java.util.Set;
- public class ForeignIdentify {
- String socailSecurityNumber;
- // 模拟一个社保号的数据库
- static Set<String> dbSet = new HashSet<>();
- static {
- dbSet.add("F001");
- dbSet.add("F002");
- dbSet.add("F003");
- }
- public boolean check(String socailSecurityNumber) {
- if (dbSet.contains(socailSecurityNumber)) {
- System.out.println(socailSecurityNumber + "是外国的合法公民");
- return true;
- } else {
- System.out.println(socailSecurityNumber + "不是外国的合法公民");
- return false;
- }
- }
- }
- package designpattern.adapter;
- import java.util.HashSet;
- import java.util.Set;
- public class ChineseIdentify {
- String idCardNumber;
- // 模拟一个身份证号的数据库
- static Set<String> dbSet = new HashSet<>();
- static {
- dbSet.add("张三C001");
- dbSet.add("李四C002");
- dbSet.add("王五C003");
- }
- public boolean check(String idCardNumber, String name) {
- if (dbSet.contains(name + idCardNumber)) {
- System.out.println(name + idCardNumber + "是中国的合法公民");
- return true;
- } else {
- System.out.println(name + idCardNumber + "不是中国的合法公民");
- return false;
- }
- }
- }
- package designpattern.adapter;
- import java.util.HashMap;
- import java.util.Map;
- public class ChinesePassport extends ForeignIdentify {
- ChineseIdentify chineseIdentify = new ChineseIdentify();
- // 模拟身份证、名字对应数据库
- static Map<String, String> db = new HashMap<>();
- static {
- db.put("C001", "张三");
- db.put("C002", "李四");
- db.put("C003", "王五");
- }
- @Override
- public boolean check(String idCardNumber) {
- // 为了模拟两个接口不完全一样,假设中国的身份验证需要身份证号和名字两个条件
- return chineseIdentify.check(idCardNumber, getName(idCardNumber));
- }
- private String getName(String idCardNumber) {
- return db.get(idCardNumber);
- }
- }
- package designpattern.adapter;
- public class Client {
- public static void main(String[] args) {
- ForeignIdentify foreignIdentify = new ForeignIdentify();
- enter("F001", foreignIdentify);
- enter("F004", foreignIdentify);
- // 直接用身份证号来验证
- enter("C003", foreignIdentify);
- // 换成护照
- foreignIdentify = new ChinesePassport();
- enter("C003", foreignIdentify);
- }
- public static void enter(String number, ForeignIdentify foreignIdentify) {
- System.out.println("=============外国入关==============");
- if (foreignIdentify.check(number)) {
- System.out.println("允许入关!");
- } else {
- System.out.println("禁止入关!");
- }
- }
- }
结果输出:
- =============外国入关==============
- F001是外国的合法公民
- 允许入关!
- =============外国入关==============
- F004不是外国的合法公民
- 禁止入关!
- =============外国入关==============
- C003不是外国的合法公民
- 禁止入关!
- =============外国入关==============
- 王五C003是中国的合法公民
- 允许入关!
总结:
设计模式 | 适配器模式(adapter)的更多相关文章
- 设计模式 - 适配器模式(adapter pattern) 具体解释
适配器模式(adapter pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 适配器模式(adapter pattern): 将一个类的接 ...
- 设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 具体解释
适配器模式(adapter pattern) 枚举器和迭代器 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考适配器模式(adapter patter ...
- 设计模式--适配器模式Adapter(结构型)
一.适配器模式 适配器模式的主要作用是在新接口和老接口之间进行适配.将一个类的接口转换成客户端期望的另外一个接口.其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重 ...
- 说说设计模式~适配器模式(Adapter)
返回目录 之前和大家一起谈了工厂模式和单例模式,今天来看一下另一种非常常用的模式,它就是适配器模式,第一次看到这个模式是通过“张逸”老师的“设计之道”这篇文章,在这里表adapter讲的很透彻,今天把 ...
- [工作中的设计模式]适配器模式adapter
一.模式解析 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 也就是说,如果已经写好了一个接口,但是又来了一种截然不同的接口,如 ...
- C#设计模式——适配器模式(Adapter Pattern)
一.概述在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件. ...
- 设计模式-适配器模式(Adapter)
简介: 适配器模式在我看来是最无聊的一种模式,因为他根本不是一种新的创意模式,而是一种不得已而为之的模式.就算不学适配器模式,在具体应用场景中也会自然而然的想到这种解决方案. 张三在英国留学时买了个笔 ...
- 大话设计模式--适配器模式 Adapter -- C++实现实例
1.适配器模式: 将一个类的接口转换为客户希望的另一个接口,使得原来由于接口不能一起工作的那些类一起工作. 适配器模式一般用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 适配器模式分 ...
- [设计模式]适配器模式Adapter
将一个类的接口转换成客户希望的另外一个接口. A d a p t e r模式使得原本 由于接口不兼容而不能一起工作的那些类可以一起工作.
- 设计模式(五)适配器模式Adapter(结构型)
设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相 ...
随机推荐
- 网络基础——UDP
UDP 1.UDP首部格式 源端口号(16) 目标端口号(16) UDP长度(16) UDP校验和(16) UDP长度:用来指出UDP的总长度 校验和:用来完成对UDP数据的差错检验,它是UDP协议提 ...
- 洛谷 3979 BZOJ 3083 遥远的国度
[题解] 这道题除去根操作就是普通的树链剖分了.但是有换根操作怎么处理呢? 我们可以发现如果现在的根不在查询的点的子树里,那么对本次查询没有影响.如果现在的跟在查询的点x的子树里,那么答案将变为整棵树 ...
- BZOJ 1726 洛谷 2865 [USACO06NOV]路障Roadblocks【次短路】
·求1到n的严格次短路. [题解] dijktra魔改?允许多次入队,改了次短路的值也要入队. #include<cstdio> #include<algorithm> #de ...
- unigui+fastreport 打印【4】
1.建立一个uniForm,用于建立FastReport打印界面.在Form上增加uniFrame.和传统的的报表打印设计一样一样的. 2.在beofeShow事情中: procedure TUniF ...
- 转载 - Struts2 拦截器详细配置过程
出处:http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html Struts2 拦截器详细配置过程 1:所有拦截器的超级接口Inter ...
- mcp2515 芯片驱动总线错误BUG的解决方法
http://blog.renren.com/share/221002615/11483613167 来自张涛的日志 现象:CAN总线在线上设备热插拔或长时间运行后出现总线异常情况,有时不能发送和接收 ...
- [bzoj1612][Usaco2008 Jan]Cow Contest奶牛的比赛_dfs
Cow Contest奶牛的比赛 bzoj-1612 Usaco-2008 Jan 题目大意:题目链接. 注释:略. 想法: 我们对于每个点dfs,看一下比这个点大的点加上比这个点小的点是否是n-1即 ...
- SAP Portal 上传资源到WRR
Uploading Resources to the Web Resource Repository Prerequisites You have been assigned the Content ...
- Java使用JNative调用DLL库
编写测试DLL文件,源文件参照JNA调用用的DLL文件.地址:http://www.cnblogs.com/vevy/p/9076941.html (很重要)右键项目 --> 属性 --> ...
- SecureCRT复制粘贴快捷键
复制:[Ctrl]+[Insert] 粘贴:[Shift]+[Insert]