首页 / 设计模式 / 设计模式之适配器模式
设计模式之适配器模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式之适配器模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3356字,纯文字阅读大概需要5分钟。
内容图文
![设计模式之适配器模式](/upload/InfoBanner/zyjiaocheng/1002/e2afbeeee7b14ef28eab2e3103bea7b4.jpg)
适配器模式
-
适配器模式结构图:
-
示例代码:
// 已有登录类实现 public class PassportService { public String regist(String userName, String password){ System.out.println("注册成功============="); return "success"; } public String loginOld(String userName, String password){ System.out.println("登录成功============="); return "success"; } } // 登录接口 public interface LoginAdapter { boolean support(Object obj); String login(String username, String password); } // 抽象适配器类(继承已有类,并实现登录接口) public abstract class AbstractAdapter extends PassportService implements LoginAdapter{ public abstract boolean support(Object obj) ; public abstract String login(String username, String password) ; } // QQ登录,继承抽象适配器类 public class LoginForQQAdapter extends AbstractAdapter { @Override public boolean support(Object obj) { return obj instanceof LoginForQQAdapter; } @Override public String login(String username, String password) { System.out.println("QQ登录"); if (password == null){ password = "THIRD_PASSWORD"; super.regist(username,password); System.out.println("QQ号注册成功===="); } return super.loginOld(username, password); } } // 手机登录,继承抽象适配器类 public class LoginForTelAdapter extends AbstractAdapter { @Override public boolean support(Object obj) { return obj instanceof LoginForTelAdapter; } @Override public String login(String username, String password) { System.out.println("手机号登录"); return super.loginOld(username, password); } } // 微信登录,继承抽象适配器类 public class LoginForWechatAdapter extends AbstractAdapter { @Override public boolean support(Object obj) { return obj instanceof LoginForWechatAdapter; } @Override public String login(String username, String password) { System.out.println("微信登录"); if (password == null){ password = "THIRD_PASSWORD"; super.regist(username,password); System.out.println("微信号注册成功===="); } return super.loginOld(username, password); } } // 第三方登录接口 public interface PasswordForThird { String loginForQQ(String openId); String loginForWechat(String openId); String loginForTel(String phone, String code); } // 第三方登录实现 public class PasswordForThirdAdapter implements PasswordForThird{ @Override public String loginForQQ(String openId) { return processLogin(openId, null, LoginForQQAdapter.class); } @Override public String loginForWechat(String openId) { return processLogin(openId, null, LoginForWechatAdapter.class); } @Override public String loginForTel(String phone, String code) { return processLogin(phone, null, LoginForTelAdapter.class); } // 注意这里,通过多态实现适配器切换选择 private String processLogin(String username, String password, Class<? extends LoginAdapter> clazz) { String message = ""; try { LoginAdapter instance = clazz.getDeclaredConstructor().newInstance(); if (instance.support(instance)){ message = instance.login(username, password); } } catch (Exception e) { e.printStackTrace(); } return message; } } // 测试类 public class AdapterTest { public static void main(String[] args) { PasswordForThird adapter = new PasswordForThirdAdapter(); System.out.println(adapter.loginForQQ("lskdjflsdf")); } }
-
总结:适配器分为类适配器,对象适配器和接口适配器三类,上面的结构图为最简单的类适配器结构图,而下面的示例代码为一段登录的综合运用的代码示例,只为理解适配器模式.
优点:提高类的透明性和复用,适配器类和原角色类解偶,提供了程序的扩展性;符合开闭原则;
缺点:增加了系统的复杂性.
内容总结
以上是互联网集市为您收集整理的设计模式之适配器模式全部内容,希望文章能够帮你解决设计模式之适配器模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。