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是中國的合法公民 容許入關!