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("禁止入关!"); } } }
结果输出:java
=============外国入关============== F001是外国的合法公民 容许入关! =============外国入关============== F004不是外国的合法公民 禁止入关! =============外国入关============== C003不是外国的合法公民 禁止入关! =============外国入关============== 王五C003是中国的合法公民 容许入关!