【设计模式】19.适配器模式

适配器模式:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
优点:
1.适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成。
2.增加了类的透明性。
3.提高了类的复用度。
4.灵活性非常好。

package com.syc.designpatterns.chapter19;

public interface IUserInfo {
	// 获取用户姓名
	public String getUserName();
	// 获得家庭地址
	public String getHomeAddress();
	// 手机号码,这个太重要,手机泛滥呀
	public String getMobileNumber();
	// 办公电话,一般是座机
	public String getOfficeTelNumber();
	// 这个人的职位是什么
	public String getJobPosition();
	// 获得家庭电话,这有点不好,我不喜欢打家庭电话讨论工作
	public String getHomeTelNumber();
}

package com.syc.designpatterns.chapter19;

public class UserInfo implements IUserInfo{

	/**
	 * 获得家庭地址,下属送礼也可以找到地方
	 */
	public String getHomeAddress() {
		System.out.println("这里是员工的家庭地址....");
		return null;
	}

	/**
	 * 获得家庭号码
	 */
	public String getHomeTelNumber() {
		System.out.println("员工的家庭电话是....");
		return null;
	}

	/**
	 * 员工的职位,是部门经理还是普通职员
	 */
	public String getJobPosition() {
		System.out.println("这个人的职位是BOSS....");
		return null;
	}

	/**
	 * 手机号码
	 */
	public String getMobileNumber() {
		System.out.println("这个人的手机号码是0000....");
		return null;
	}

	/**
	 * 办公室电话,烦躁的时候最好“不小心”把电话线踢掉
	 */
	public String getOfficeTelNumber() {
		System.out.println("办公室点哈是....");
		return null;
	}

	/**
	 * 姓名,这个很重要
	 */
	public String getUserName() {
		System.out.println("姓名叫做....");
		return null;
	}

}

package com.syc.designpatterns.chapter19;

import java.util.Map;

public interface IOuterUser {
	// 基本信息,比如名称、性别、手机号码等
	@SuppressWarnings("unchecked")
	public Map getUserBaseInfo();
	// 工作区域信息
	@SuppressWarnings("unchecked")
	public Map getUserOfficeInfo();
	// 用户的家庭信息
	@SuppressWarnings("unchecked")
	public Map getUserHomeInfo();
}

package com.syc.designpatterns.chapter19;

import java.util.HashMap;
import java.util.Map;

public class OuterUser implements IOuterUser {

	/**
	 * 用户的基本信息
	 */
	public Map getUserBaseInfo() {
		HashMap<String, String> baseInfoMap = new HashMap<String, String>();
		baseInfoMap.put("username", "这个员工叫混世魔王....");
		return baseInfoMap;
	}

	/**
	 * 员工的家庭信息
	 */
	public Map getUserHomeInfo() {
		HashMap<String, String> homeInfo = new HashMap<String, String>();
		homeInfo.put("homeTelNumber", "员工的家庭电话是....");
		return homeInfo;
	}

	/**
	 * 员工的工作信息,比如,职位等
	 */
	public Map getUserOfficeInfo() {
		HashMap<String, String> officeInfo = new HashMap<String, String>();
		officeInfo.put("jobPosition", "这个人的职位是BOSS....");
		officeInfo.put("officeTelNumber", "员工的办公电话是....");
		return officeInfo;
	}

}


package com.syc.designpatterns.chapter19;

import java.util.Map;

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

	private Map<String, String> baseInfo = super.getUserBaseInfo(); // 员工的基本信息
	private Map<String, String> homeInfo = super.getUserHomeInfo(); // 员工的家庭信息
	private Map<String, String> officeInfo = super.getUserOfficeInfo(); // 工作信息
	
	/**
	 * 家庭地址
	 */
	public String getHomeAddress() {
		String homeAddress = this.homeInfo.get("homeAddress");
		System.out.println(homeAddress);
		return homeAddress;
	}

	/**
	 * 家庭电话号码
	 */
	public String getHomeTelNumber() {
		String homeTelNumber = this.homeInfo.get("homeTelNumber");
		System.out.println(homeTelNumber);
		return homeTelNumber;
	}

	/**
	 * 职位信息
	 */
	public String getJobPosition() {
		String jobPosition = this.officeInfo.get("jobPosition");
		System.out.println(jobPosition);
		return jobPosition;
	}

	/**
	 * 手机号码
	 */
	public String getMobileNumber() {
		String mobileNumber = this.baseInfo.get("mobileNumber");
		System.out.println(mobileNumber);
		return mobileNumber;
	}

	/**
	 * 办公电话
	 */
	public String getOfficeTelNumber() {
		String officeTelNumber = this.officeInfo.get("officeTelNumber");
		System.out.println(officeTelNumber);
		return officeTelNumber;
	}

	/**
	 * 员工的名称
	 */
	public String getUserName() {
		String userName = this.baseInfo.get("userName");
		System.out.println(userName);
		return userName;
	}

}


package com.syc.designpatterns.chapter19;

public class Client {

	public static void main(String[] args){
//		IUserInfo youngGirl = new UserInfo();
		IUserInfo youngGirl = new OuterUserInfo(); // 替换上面调用,体现适配器模式
		for(int i=0;i<101;i++){
			youngGirl.getMobileNumber();
		}
	}
}

你可能感兴趣的:(适配器模式)