适配器模式

定义:

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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值