首页 > 编程知识 正文

笔记本电源适配器插口(适配器模式两种方式)

时间:2023-05-06 11:45:47 阅读:76333 作者:4331

适配器模式定义:将一个类的接口转换为客户端所需的另一个接口,使因接口不兼容而不能一起工作的类一起工作。 属于结构型设计模式。

适配器模式包括类适配器、对象适配器和接口适配器。

适配器模式结构:适配器模式(Adapter )包含三个主要角色。

目标(Target )角色)是被系统业务所期待的接口,可以是抽象类也可以是接口。 适配器(Adaptee )角色(等待被适配器的对象。 适配器(Adapter )类)这是将适配器角色转换为目标角色的转换器。 类适配器实现:类适配器通过继承实现匹配功能。

//适配器角色public class adaptee { public void do something () { System.out.println )适配器角色将工作! ' ); (//目标角色公共界面请求); //适配器类publicclassclassadapterextendsadapteeimplementstarget { @ overridepublicvoidrequest () { doSomeThing; System.out.println ('适配器将转换适配器角色! ' ); }//测试类publicclassclassadaptertest { publicstaticvoidmain (字符串[ ] args ) { Target target=new ClassAdapter ); target.request (; }类适配器的结构图

对象适配器的实现:对象适配器通过组合实现匹配功能。

//适配器角色public class adaptee { public void do something () { System.out.println )适配器角色将工作! ' ); (//目标角色公共界面请求); //适配器类publicclassobjectadapterimplementstarget { privateadapteeadaptee; publicobjectadapter (adaptee adaptee ) { this.adaptee=adaptee; } @Override public void request () { adaptee.doSomeThing ); System.out.println ('适配器将转换适配器角色! ' ); (//测试类Publicclassobjectadaptertest ) publicstaticvoidmain (字符串[ ] args ) ) { Adaptee adaptee=new Adaptee; 目标目标=新对象适配器(adaptee; target.request (; }对象适配器的结构图:

接口适配器实现:如果有太多接口方法需要转换,请使用接口适配器。 在这种情况下,使用类适配器或对象适配器会产生大量适配器类,导致系统复杂且体积庞大。

//适配器角色public class adaptee { public void do something () { System.out.println )适配器角色将工作! ' ); (//目标角色公共接口目标) void请求1 ); Void请求2 (; Void请求3 (; Void请求4 (; Void请求5 (; //适配器类publicclassadapterimplementstarget { privateadapteeadaptee; publicadapter(adapteeadaptee ) { this.adaptee=adaptee; } @Override public void request1() { adaptee.doSomeThing ); System.out.println; } @Override public void request2() { adaptee.doSomeThing ); System.out.println; } @Override public void request3() { adaptee.doSomeThing ); 系统

m.out.println("适配器要将适配者角色做转换成目标对象3"); } @Override public void request4() { adaptee.doSomeThing(); System.out.println("适配器要将适配者角色做转换成目标对象4"); } @Override public void request5() { adaptee.doSomeThing(); System.out.println("适配器要将适配者角色做转换成目标对象5"); }}//测试类public class AdapterTest { public static void main(String[] args) { Adaptee adaptee = new Adaptee(); Target target = new Adapter(adaptee); target.request1(); target.request2(); target.request3(); target.request4(); target.request5(); }}

接口适配器的结构图:

适配器模式的应用实例:模拟系统第三方登录,分别使用QQ/微信/微博三种方式登录。

//登录返回结果public class ResultMsg { private int code; private String msg; public ResultMsg(int code,String msg){ this.code = code; this.msg = msg; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}//原有登录方法public class LoginService { public ResultMsg login(String username,String password){ return new ResultMsg(200,"登录成功~"); }}//登录适配器接口public interface LoginAdapter { boolean support(Object object); ResultMsg login(Object[] username,Object adapter);}//抽象登录适配器,实现公共登录方法public abstract class AbstractAdapter extends LoginService implements LoginAdapter{ public ResultMsg login(Object[] id, Object adapter) { if(support(adapter)){ return super.login(id.toString(), null); } return new ResultMsg(1111,"未支持的登录方式!!!"); }}//QQ登录适配器,实现校验逻辑public class LoginForQQAdapter extends AbstractAdapter{ @Override public boolean support(Object adapter) { return adapter instanceof LoginForQQAdapter; }}//微信登录适配器,实现校验逻辑public class LoginForWeChatAdapter extends AbstractAdapter{ @Override public boolean support(Object adapter) { return adapter instanceof LoginForWeChatAdapter; }}//微博登录适配器,实现校验逻辑public class LoginForWeiboChatAdapter extends AbstractAdapter{ @Override public boolean support(Object adapter) { return adapter instanceof LoginForWeiboChatAdapter; }}//第三方登录接口public interface ILoginForThird { ResultMsg loginForQQ(Object[] openId); ResultMsg loginForWechat(Object[] openId); ResultMsg loginForWeibo(Object[] openId);}//第三方登录实现类public class LoginForThirdAdapter implements ILoginForThird{ @Override public ResultMsg loginForQQ(Object[] openId) { return loginForThird(openId,new LoginForQQAdapter()); } @Override public ResultMsg loginForWechat(Object[] openId) { return loginForThird(openId,new LoginForWeChatAdapter()); } @Override public ResultMsg loginForWeibo(Object[] openId) { return loginForThird(openId,new LoginForWeiboChatAdapter()); } private ResultMsg loginForThird(Object[] openId,LoginAdapter adapter){ if(adapter.support(adapter)){ return adapter.login(openId,adapter); } return null; }}//测试类public class Test { public static void main(String[] args) { LoginForThirdAdapter adapter = new LoginForThirdAdapter(); ResultMsg resultMsg = adapter.loginForQQ(new Object[]{"96e79218965eb72c92a549dd5a330112"}); System.out.println(resultMsg.getMsg()); }}

第三方登录应用实例的结构图:

适配器模式的优点:

复用了现存的类,不需要修改原有代码而重用现有的适配者类。将目标类和适配者类解耦,提供程序的扩展性。在很多业务场景中符合开闭原则。

适配器模式的缺点是:

适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。

适配器模式适用的场景:

已经存在满足新系统功能需求的类,但其接口同新系统的接口不一致。使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。