最近想学习下设计模式,上个月我也在咱们慕课网中看了这个模式的视频了,一致没有写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就写完了,希望读者看完我写这篇文章能够理解适配器的实现,写的不好之处请大家指出来。小弟再次谢谢大家了
热门评论
输出语句别用system.out.println