定义:
1、将一个类的接口转换成客户希望的另一个类的接口,Adapter模式使原来接口不兼容而不能一起工作的类可以在一起工作。
模式中的角色:
2.1 目标接口(Target):客户想要的接口。目标可以是具体的或抽象的类,也可以是接口。
2.2 需要适配的类(Adaptee):需要适配的类或适配者类。
2.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
实现过程:
当我需要一个功能的时候,我发现无法直接获取这个功能,功能的提供者提供的功能虽然是我最终想要的功能,但是提供的方式却不是我想要的
定义一个类,继承自外部的功能提供者,实现我想要的功能提供方式,在它内部进行转换, 将外部的数据获取到之后,通过我想要的提供方式返回回来
优缺点:
优点:通过适配器将目标类和适配者类解耦,引入一个适配器类重用现有的适配器类,而无须修改代码,这样做更简单,更直接,更紧凑.
一个对象适配器可以把多个不同的适配者类适配到同一个目标类,也就是说一个适配器可以把适配者和他的子类适配到目标接口.
缺点:对于对象适配器来说,更换适配器的实现过程是比较复杂.
应用场景:
系统需要使用现有的类,而这些类的接口不符合系统的接口。
两个类所做的事情相同或相似,但是具有不同接口的时候。
这里写代码片
public interface outUserInfo {
String getUserName();
String getUserAddress();
String getUserAge();
String getUserHomePhone();
String getUserfdfgdsff();
String getUserderwgfdb();
String getUserbshew();
}
public class OuterUser implements outUserInfo {
private String userName, age, address, homep, gasg, gsafg, gsag;
@Override
public String getUserName() {
return userName;
}
@Override
public String getUserAddress() {
return address;
}
@Override
public String getUserAge() {
return age;
}
@Override
public String getUserHomePhone() {
return homep;
}
@Override
public String getUserfdfgdsff() {
return gasg;
}
@Override
public String getUserderwgfdb() {
return gsafg;
}
@Override
public String getUserbshew() {
return gsag;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setAge(String age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
public void setHomep(String homep) {
this.homep = homep;
}
public void setGasg(String gasg) {
this.gasg = gasg;
}
public void setGsafg(String gsafg) {
this.gsafg = gsafg;
}
public void setGsag(String gsag) {
this.gsag = gsag;
}
}
public interface IUserInfo {
String getName();
String getAge();
String getAddres();
}
public class Iuser implements IUserInfo {
private String name,age, address;
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String getName() {
return name;
}
@Override
public String getAge() {
return age;
}
@Override
public String getAddres() {
return address;
}
}
public class OutInUser extends OuterUser implements IUserInfo {
@Override
public String getName() {
return getUserName();
}
@Override
public String getAge() {
return getUserAge();
}
@Override
public String getAddres() {
return getUserAddress();
}
}
public class GuanliLei {
private List<IUserInfo> userInfoList = new ArrayList<>();
public void add(IUserInfo i){
userInfoList.add(i);
}
public void remove(IUserInfo iUserInfo) {
userInfoList.remove(iUserInfo);
}
public void getName() {
for (IUserInfo iUserInfo : userInfoList) {
System.out.println(iUserInfo.getName());
}
}
}
public class Test {
public static void main(String[] args) {
GuanliLei guanliLei = new GuanliLei();
Iuser iuser = new Iuser();
iuser.setAddress("addddaaa");
iuser.setAge("18");
iuser.setName("我18");
guanliLei.add(iuser);
guanliLei.getName();
OutInUser outInUser = new OutInUser();
outInUser.setUserName("我是外来者");
guanliLei.add(outInUser);
guanliLei.getName();
}
}