`

【设计模式】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();
		}
	}
}

分享到:
评论

相关推荐

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...

    设计模式_源代码大全.zip

    设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...

    23种设计模式--适配器模式

    例如,在视频教程“AS3视频教程19_适配器模式.avi”中,可能讲解了如何在ActionScript 3(AS3)中使用适配器模式来兼容不同的视频播放技术或接口,使得不同来源的视频能在同一平台上播放。 适配器模式的优点包括: ...

    java二十二种设计模式pdf完整版最新版本

    5. 适配器模式 6. 桥接模式 7. 组合模式 8. 装饰器模式 9. 外观模式 10. 享元模式 11. 代理模式 12. 命令模式 13. 责任链模式 14. 解释器模式 15. 迭代器模式 16. 备忘录模式 17. 中介者模式 18. 状态模式 19. 观察...

    23种JAVA设计模式经典.zip

    7. 适配器模式(Adapter):将一个类的接口转换成客户希望的另一个接口。适配器使原本因接口不兼容而不能一起工作的那些类可以一起工作。 8. 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。 ...

    golang design pattern go 设计模式实现.zip

    "golang design pattern go 设计模式实现.zip" 文件提供了23种Go语言设计模式的实现,这些模式主要来自于经典的《设计模式:可复用面向对象软件的基础》一书,即通常所说的GOF(Gang of Four)设计模式。 1. **单例...

    C#23种设计模式【完整】.pdf

    6. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另外一个接口,实现了两个不兼容接口之间的适配。 7. 桥接模式(Bridge Pattern):将一个类的抽象部分与实现部分分离,使得它们可以独立地变化。...

    C#新版设计模式手册[中文][共二卷][vol1]

    6.适配器模式..................................................32 7.桥接模式....................................................38 8.组合模式....................................................45 9...

    C#设计模式_设计模式_C#_

    适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式...

    设计模式(.PDF)

    1.7 怎样选择设计模式 19 1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化...

    设计模式Pro.zip

    6. **适配器模式**:将一个类的接口转换成客户期望的另一个接口。适配器使原本不兼容的类可以一起工作。 7. **装饰器模式**:动态地给一个对象添加一些额外的职责。装饰器可以独立增加功能,而不会影响其他对象。 ...

    设计模式PPT.rar

    12第十二讲代理模式 13第十三讲外观模式 14第十四讲组合模式 15第十五讲桥接模式 16第十六讲适配器模式 17第十七讲解释器模式 18第十八讲中介者模式 19第十九讲职责链模式 20第二十讲迭代模式 21第二十一讲模板方法...

    GoF.rar_K._design patterns_k_eckel_设计模式GOF.pdf

    《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software),通常简称为GOF设计模式,是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者...

    设计模式课程每章ppt(共27章).zip

    ├── 第10章_适配器模式.ppt ├── 第11章_桥接模式.ppt ├── 第12章_组合模式.ppt ├── 第13章_装饰模式.ppt ├── 第14章_外观模式.ppt ├── 第15章_享元模式.ppt ├── 第16章_代理模式.ppt ├── 第...

    设计模式详解.doc

    14. 适配器模式: 使不兼容的接口能够协同工作,如笔记本电脑的适配器,使得不同电源规格的设备能正常充电。 15. 代理模式: 创建一个代理对象来控制对原对象的访问,如QQ聊天机器人,代理真实用户进行互动。 16...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    23种设计模式案例.rar

    6. **适配器模式**:将两个不兼容的接口转换为可以互相操作的形式,如Java的`InputStreamReader`和`BufferedReader`。 7. **装饰器模式**:动态地给对象添加一些额外的职责,Spring AOP(面向切面编程)就是基于...

    C#新版设计模式手册[中文][共二卷][vol2]

    6.适配器模式..................................................32 7.桥接模式....................................................38 8.组合模式....................................................45 9...

    C#最全经典设计模式Demo.zip

    6. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。C#中,可以使用类适配器或接口适配器。 7. **装饰器模式(Decorator)**:动态地给一个对象添加一些额外的职责。C#中,可以利用多态和...

Global site tag (gtag.js) - Google Analytics