美文网首页
设计模式之——适配器模式

设计模式之——适配器模式

作者: vincent浩哥 | 来源:发表于2019-10-19 00:14 被阅读0次

    适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作,属于结构型设计模式。

    适用的业务场景

    1、已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。
    2、适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案。有点亡羊补牢的感觉。

    //登录适配器接口
    public interface LoginAdapter {
        boolean support(Object adapter);
        ResultMsg login(String id,Object adapter);
    }
    

    适配各种登陆方式

    public class LoginForTelAdapter implements LoginAdapter {
        public boolean support(Object adapter) {
            return adapter instanceof LoginForTelAdapter;
        }
        public ResultMsg login(String id, Object adapter) {
            return null;
        }
    }
    public class LoginForWechatAdapter implements LoginAdapter {
        public boolean support(Object adapter) {
            return adapter instanceof LoginForWechatAdapter;
        }
        public ResultMsg login(String id, Object adapter) {
            return null;
        }
    }
    
    public interface IPassportForThird {
        /**
        * 微信登录
        * @param id
        * @return
        */
        ResultMsg loginForWechat(String id);
        /**
        * 手机号登录
        * @param telphone
        * @param code
        * @return
        */
        ResultMsg loginForTelphone(String telphone, String code);
    }
    
    public class PassportForThirdAdapter extends SiginService implements IPassportForThird {
    
        public ResultMsg loginForWechat(String id) {
            return processLogin(id,LoginForWechatAdapter.class);
        }
    
        public ResultMsg loginForTelphone(String telphone, String code) {
            return processLogin(telphone,LoginForTelAdapter.class);
        }
    
        //这里用到了简单工厂模式及策略模式
        private ResultMsg processLogin(String key,Class<? extends LoginAdapter> clazz){
            try {
                LoginAdapter adapter = clazz.newInstance();
                if(adapter.support(adapter)) {
                    return adapter.login(key, adapter);
                }else {
                    return null;
                }
            }catch (Exception e){
                e.printStackTrace();;
            }
            return null;
         }
    }
    
    //testing
    public class PassportTest {
        public static void main(String[] args) {
            IPassportForThird passportForThird = new PassportForThirdAdapter();
            passportForThird.loginForWechat("abc");
        }
    }
    
    

    优点

    1、能提高类的透明性和复用,现有的类复用但不需要改变。
    2、目标类和适配器类解耦,提高程序的扩展性。
    3、在很多业务场景中符合开闭原则。

    缺点

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

    相关文章

      网友评论

          本文标题:设计模式之——适配器模式

          本文链接:https://www.haomeiwen.com/subject/akrbuctx.html