您的位置:首页 > 编程语言 > Java开发

java设计模式-适配器模式

2017-09-06 00:00 274 查看
摘要: java设计模式之适配器模式

适配器模式有两种类型,类适配器模式对象适配器模式。由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。

适配器模式官方定义

将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

个人理解

举个栗子,假如我现在有钱了,去巴厘岛去旅游。当地提供的住宿环境是那种欧式的插线板,但我手机充电器是中国通用的那种两个插线头。在这种情况下我手机已经没电了必须要充电,担我直接充不了怎么办。去当地的超市买来了一个转接头,拿回住的地方用转接头就可以充电了。网上这张图给我启发很大如下



转接头(Adapter模式)使得原本由于插头与线板(接口)不兼容而不能一起充电(工作)的那些线(类)可以在一起工作。

适配器模式中的角色





目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

需要适配的类(Adaptee):需要适配的类或适配者类。

适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。 

实现方法看看效果

公司现在是做自己产品(速),但是老板发现一个新的商机又开发出来一个新的产品(玩)。希望在(玩)产品上同事可以看到(速)产品中的用户。但由于两个产品不是同一技术团队研发的。在技术与开发规范中都不是很统一。适配器模式就是要解决这样的问题

代码清单:(玩)用户信息接口

public interface IUserInfo {
public String getUserName();
public String getUserPhone();
public String getUserJobPosition();
}

代码清单:(玩)用户信息实现方法

public class UserInfo implements IUserInfo {
@Override
public String getUserName() {
System.out.println("张三");
return null;
}

@Override
public String getUserPhone() {
System.out.println("15811111111");
return null;
}

@Override
public String getUserJobPosition() {
System.out.println("CEO");
return null;
}
}

代码清单:(速)用户信息实现方法

public class Perpersonnel {
public Map getUserBasic(){
HashMap<Object, String> userBasic = new HashMap<Object, String>();
userBasic.put("UserName","王五");
userBasic.put("UserPhone","18811111111");
return userBasic;
}
public Map getUserJob(){
HashMap<Object, String> userJobPosition = new HashMap<Object, String>();
userJobPosition.put("JobPosition","CTO");
return userJobPosition;
}
}

代码清单:主角适配器

public class UserInfoAdapter extends Perpersonnel implements IUserInfo{
public String getUserName() {
String userName = (String) getUserBasic().get("UserName");
System.out.println(userName);
return userName;
}
public String getUserPhone() {
String UserPhone = (String) getUserBasic().get("UserPhone");
System.out.println(UserPhone);
return UserPhone;
}
public String getUserJobPosition() {
String JobPosition = (String) getUserJob().get("JobPosition");
System.out.println(JobPosition);
return JobPosition;
}
}

代码清单:(玩)产品上查询两个产品的用户信息

public class Test {
public static void main(String[] args) {
IUserInfo iuserInfo = new UserInfo();
iuserInfo.getUserName();
iuserInfo.getUserPhone();
iuserInfo.getUserJobPosition();

System.out.println("---------------------");

IUserInfo iuserInfoAdapter = new UserInfoAdapter();
iuserInfoAdapter.getUserName();
iuserInfoAdapter.getUserPhone();
iuserInfoAdapter.getUserJobPosition();

}
}

查询出来的结果如下:

张三
15811111111
CEO
---------------------
王五
18811111111
CTO


适配器模式的优缺点

优点

适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成。

增加了类的透明性

提高了类的复用度

灵活性非常好

缺点

对于对象适配器来说,更换适配器的实现过程比较复杂。

适配器模式的使用场景

适配器模式的使用场景主要记住一点就足够了:你想修改一个已经投产中的接口時,适配器模式可能是最适合你的模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息