适配器模式(结构类)

UML

这里写图片描述

介绍

  • 意图: 将一个类的接口转换成客户希望的另一个接口。使得原来由于接口不兼容而不能一起工作的类可以一起工作
  • 优点: 1.可以让任何没有关联的类一起运行。2.提高了类的复用
  • 缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。
  • 应用举例: 1.linux 上运行windows程序。2.java 中的jdbc

例子

UML
这里写图片描述

IUserInfo(Target)

public interface IUserInfo {

     String getUsername() ;  

     String getHomeAddress() ; 

     String getOfficeTelNumber() ; 

     String getJobPosition() ; 

     String getHomeTelNumber() ; 

}

IOuterUser

import java.util.Map;

@SuppressWarnings("rawtypes")
public interface IOuterUser {

    Map  getUserBaseInfo() ; 

    Map  getUserOfficeInfo() ; 

    Map  getUserHomeInfo(); 

}

UserInfo


public class UserInfo implements IUserInfo{

    @Override
    public String getUsername() {
        System.out.println("获取员工名字 --- 我是本公司的。。。。。");
        return null;
    }

    @Override
    public String getHomeAddress() {
        System.out.println("获取员工地址 -------  ");
        return null;
    }

    @Override
    public String getOfficeTelNumber() {
        System.out.println("获取员工工作电话--------   ");
        return null;
    }

    @Override
    public String getJobPosition() {
        System.out.println("获取工作职位");
        return null;
    }

    @Override
    public String getHomeTelNumber() {
        System.out.println("获取员工家庭电话");
        return null;
    }

}

OutUser(Adaptee)

import java.util.HashMap;
import java.util.Map;
@SuppressWarnings("all")
public class OuterUser implements IOuterUser{


    @Override
    public Map getUserBaseInfo() {
        HashMap map = new HashMap()  ;
        map.put("username", "这个员工叫做某某某") ; 
        return map;
    }

    @Override
    public Map getUserOfficeInfo() {
        HashMap map = new HashMap() ; 
        map.put("officeTelNumber", "公司电话是7474774")  ;  
        map.put("jobPosition", "俺们是boss") ; 
        return map;
    }

    @Override
    public Map getUserHomeInfo() {
        HashMap map = new HashMap() ; 
        map.put("homeAddress", "家庭地址...........")  ;  
        map.put("homeTelNumber", "8748748748748774") ; 
        return map;
    }

}

OuterUserInfo(Adapter)

import java.util.Map;

@SuppressWarnings("all")
public class OuterUserInfo extends OuterUser implements IUserInfo{

    private Map<String  , String> baseMap = super.getUserBaseInfo() ; 

    private Map<String  , String> homeMap = super.getUserHomeInfo() ; 

    private Map<String  , String> officeMap = super.getUserOfficeInfo() ; 




    @Override
    public String getUsername() {
        return baseMap.get("username");
    }

    @Override
    public String getHomeAddress() {
        return homeMap.get("homeAddress");
    }

    @Override
    public String getOfficeTelNumber() {
        return officeMap.get("officeTelNumber");
    }

    @Override
    public String getJobPosition() {
        return officeMap.get("jobPosition");
    }

    @Override
    public String getHomeTelNumber() {
        return  homeMap.get("homeTelNumber");
    }

}

Client

public class Client {

    public static void main(String[] args) {

        IUserInfo inUser = new UserInfo() ; 
        inUser.getUsername() ; 
        inUser.getHomeAddress() ; 
        inUser.getHomeTelNumber() ; 
        inUser.getJobPosition() ; 
        inUser.getOfficeTelNumber() ; 
        System.out.println("====================分割线==============");
        IUserInfo outUser = new OuterUserInfo() ; 
        System.out.println(outUser.getUsername()); 
        System.out.println(outUser.getHomeAddress());
        System.out.println(outUser.getHomeTelNumber());
        System.out.println(outUser.getJobPosition());
        System.out.println(outUser.getOfficeTelNumber());
    }
}

结果

获取员工名字 --- 我是本公司的。。。。。
获取员工地址 -------  
获取员工家庭电话
获取工作职位
获取员工工作电话--------   
====================分割线
这个员工叫做某某某
家庭地址...........
8748748748748774
俺们是boss
公司电话是7474774

参考

<<设计模式之禅>>
菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值