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是中国的合法公民 允许入关!
如对本文有疑问, 点击进行留言回复!!
软件设计模式六大原则-接口隔离原则 Interface Segregation Principle
设计模式之解释器模式(附:SpelExpressionParser中解释器模式应用分析)
网友评论