我是靠谱客的博主 儒雅小懒猪,最近开发中收集的这篇文章主要介绍Java设计模式之适配器模式Adapter(结构型)概述:适配器角色:结构实例: 模式总结 适配器应用举例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第一次见到适配器模式的时候,很佩服为设计模式命名的人,因为他们真的很符合这个名字,做到了见名知意;

概述:

在我们的开发中业务会经常的变化,接口也会做出相应的改变,而这些又是我们不得不去面对的事情,这个时候我们可以用到适配器这个模式,他将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于不兼容而不能一起工作的哪些类可以一起工作;

适配器角色:

目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

需要适配的类(Adaptee):需要适配的类或适配者类。

适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

适配器的经典实现:

适配器是英语Adapter/adaptor的汉语翻译。适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与串口的转接设备等。

结构

类适配器使用多重继承对一个接口与另一个接口进行匹配,如下图所示:


对象匹配器依赖于对象组合,如下图所示:


实例:



假设我们最开始设计了一个安卓的充电器,后来我们想让这个接口也可以满足Iphone充电器怎么办啦

针对这样的兼容性决办法就是创建一个适配器(Adapter)。

类适配器使用的是继承

/** 
 * 类适配器模式 
 * @author lyg
 *  
 */  
   
/** 
 * 目标角色 
 * @version 2.0 
 */  
interface Target {  
	
	/*/
	 * 充电器接口
	 */
    public void charger(String type);  
   
}
/** 
 * 源角色:被适配的角色 
 * @version 2.0 
 */ 
class Adaptee{
	public void PhoneCharger(){
		System.out.println("我是一个iphone充电器");
	}
}
/** 
 * 类适配器角色 
 */  
class Adapter extends Adaptee implements Target{

	@Override
	public void charger(String type) {
		if("android".equals(type)){
		System.out.println("我是一个安卓充电器");
		}
		if("Iphone".equals(type)){
			PhoneCharger();
		}
	}
	
}
public class Test {
	/*/
	 * main方法,模拟客户端调用
	 */
	public static void main(String[] args) {
		Adapter adapter=new Adapter();
		adapter.charger("Iphone");
	}
}

这样以后,以后如果程序再变动,我们也可以只需要增加适配器角色就可以满足需求;

对象适配器使用的是委派:

/** 
 * 类适配器模式 
 * @author lyg
 *  
 */  
   
/** 
 * 目标角色 
 * @version 2.0 
 */  
interface Target {  
	
	/*/
	 * 充电器接口
	 */
    public void charger(String type);  
   
}
/** 
 * 源角色:被适配的角色 
 * @version 2.0 
 */ 
class Adaptee{
	public void PhoneCharger(){
		System.out.println("我是一个iphone充电器");
	}
}
/** 
 * 类适配器角色 
 */  
class Adapter  implements Target{
	public Adaptee adaptee;

	@Override
	public void charger(String type) {
		if("android".equals(type)){
		System.out.println("我是一个安卓充电器");
		}
		if("Iphone".equals(type)){
			adaptee.PhoneCharger();
		}
	}

	public Adapter(Adaptee adaptee) {
		super();
		this.adaptee = adaptee;
	}
	

public class Test {
	/*/
	 * main方法,模拟客户端调用
	 */
	public static void main(String[] args) {
		Adaptee adaptee=new Adaptee();
		Adapter adapter=new Adapter(adaptee);
		adapter.charger("Iphone");
	}
}

如例中代码所示,你可以运用适配器(Adapter)模式来避免因外部库改变所带来的不便——倘若向上兼容。作为某个库的开发者,你应该独立编写适配器,使你的用户更简便地使用新版本的库,而不用去修改他们现有的全部代码。

     GoF书中提出的适配器(Adapter)模式更倾向于运用继承而不是组成。这在强类型语言中是有利的,因为适配器(Adapter)事实上是一个目标类的子类,因而能更好地与类中方法相结合。

模式总结

   优点

    1 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单、更直接、更紧凑。

    2 复用了现存的类,解决了现存类和复用环境要求不一致的问题。

    3 将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。

    4 一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

  2 缺点

    对于对象适配器来说,更换适配器的实现过程比较复杂。

  3 适用场景

    3.1 系统需要使用现有的类,而这些类的接口不符合系统的接口。

    3.2 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

    3.3 两个类所做的事情相同或相似,但是具有不同接口的时候。

    3.4 旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。

    3.5 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。

适配器应用举例

  1 使用过ADO.NET的开发人员应该都用过DataAdapter,它就是用作DataSet和数据源之间的适配器。DataAdapter通过映射Fill和Update来提供这一适配器。

  2 手机电源适配器



最后

以上就是儒雅小懒猪为你收集整理的Java设计模式之适配器模式Adapter(结构型)概述:适配器角色:结构实例: 模式总结 适配器应用举例的全部内容,希望文章能够帮你解决Java设计模式之适配器模式Adapter(结构型)概述:适配器角色:结构实例: 模式总结 适配器应用举例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部