继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

设计模式之适配器模式

随缘清风
关注TA
已关注
手记 15
粉丝 8
获赞 218

最近想学习下设计模式,上个月我也在咱们慕课网中看了这个模式的视频了,一致没有写demo。今天在公司里把手里的事情忙完了,趁着空闲又查了下资料。写了个demo,然后把我自己的理解和demo把它们放出来。闲话少说现在就开始我代码之路。
适配器的概念我就不说了,网上一大推,我就说说我的理解吧(大白话,勿喷!)“两个(包括两个)以上的类相同功能的方法,提取出来,写成接口。再写个类也实现这个接口(这个类也就是适配器类),这个适配器类中要有个接口的属性,并实例化这个接口属性(写个方法了或是写在构造器中啊,都行)。最后就交给第三方调用了”。
代码来啦!!!
我先说下,我这个demo是根据网页中登录功能来想出来的,网页登录中不是有合作商吗!比如QQ、新浪微博、微信。。。等等
提取公用方法写成接口

package com.david.zookerper.adapter;

/**
 * Created by david on 2016/8/1.
 */
public interface LoginInterface {

    public void login();
}

在查找资料的时候,总是看到“被适配的类”,我就纠结“被适配的类”是什么东西,什么类被适配了,原来就是已经实现提取方法后形成接口的类。有时脑袋会短路,哎!!!

package com.david.zookerper.adapter.impl;

import com.david.zookerper.adapter.LoginInterface;

/**
 * Created by david on 2016/8/1.
 */
public class QQlogin implements LoginInterface {

    @Override
    public void login() {
        System.out.println("现在是以QQ方式登录");
    }
}
package com.david.zookerper.adapter.impl;

import com.david.zookerper.adapter.LoginInterface;

/**
 * Created by david on 2016/8/1.
 */
public class SinaLogin implements LoginInterface {
    @Override
    public void login() {
        System.out.println("现在是以新浪微博方式登录");
    }
}
package com.david.zookerper.adapter.impl;

import com.david.zookerper.adapter.LoginInterface;

/**
 * Created by david on 2016/8/1.
 */
public class WechatLogin implements LoginInterface {

    @Override
    public void login() {
        System.out.println("现在是以微信方式登录");
    }
}

下面这个类就是适配器类了,这才是适配器模式中最重点的

package com.david.zookerper.adapter.impl;

import com.david.zookerper.adapter.LoginInterface;

/**
 * 合作商
 * Created by david on 2016/8/1.
 */
public class Cooperative implements LoginInterface {

    private LoginInterface loginInterface;

    public void setLoginBusiness(LoginInterface loginBusiness){
        this.loginInterface = loginBusiness;
    }

    @Override
    public void login() {
        loginInterface.login();
    }
}

上面的适配器类,里面的内容想必都写过吧,不说还以为是普普通通的重构后的类哩!哈哈!!!
接下来的类就是调取适配器类了

package com.david.zookerper.adapter;

import com.david.zookerper.adapter.impl.Cooperative;
import com.david.zookerper.adapter.impl.QQlogin;
import com.david.zookerper.adapter.impl.SinaLogin;
import com.david.zookerper.adapter.impl.WechatLogin;

/**
 * 中间类
 * Created by david on 2016/8/1.
 */
public class Intermediate {

    public enum Enum {
        QQ,SINA,WECHAT
    }

   public void selectLoginMode(Enum e){
       Cooperative cooperative = new Cooperative();
       if(e == Enum.QQ){
           LoginInterface QQLogin = new QQlogin();
           cooperative.setLoginBusiness(QQLogin);

       }else if(e == Enum.SINA){
           LoginInterface SinaLogin = new SinaLogin();
           cooperative.setLoginBusiness(SinaLogin);
       }else{
           LoginInterface WechatLogin = new WechatLogin();
           cooperative.setLoginBusiness(WechatLogin);
       }
       cooperative.login();
   }
}

测试类

package com.david.zookeeper.demo2;

import com.david.zookerper.adapter.Intermediate;
import com.david.zookerper.adapter.Intermediate.Enum;
import org.junit.Test;

/**
 * Created by david on 2016/8/1.
 */
public class DesignPattern {
    @Test
    public void testIntermediate(){
        Intermediate intermediate = new Intermediate();
        intermediate.selectLoginMode(Enum.QQ);
        intermediate.selectLoginMode(Enum.SINA);
        intermediate.selectLoginMode(Enum.WECHAT);
    }
}

写到这个,这个demo就写完了,希望读者看完我写这篇文章能够理解适配器的实现,写的不好之处请大家指出来。小弟再次谢谢大家了

打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP

热门评论

输出语句别用system.out.println

查看全部评论