Java设计模式---适配器模式(Adapter)

1.  适配器模式(Adapter Pattern)定义:

     将一个类的接口转换成客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作,简单地说:适配器模式就是把一个接口或类转换成其它的接口或类。适配器模式主要分为3类:类的适配器模式、对象的适配器模式、接口的适配器模式

2.  类的适配器模式:

核心就是:有一个Source类,拥有一个方法,待适配,目标接口时Target,通过Adapter_Class类,将Source的功能扩展到Target里

示例代码:

Source 类

public class Source {
   
	public void method1(){
		
		System.out.println("i am method1");
		
	}
	
}
Target接口

public interface Target {
   
	/**
	 * 与原类中方法一致
	 */
	public void method1();
	
	/**
	 * 新类中的方法
	 */
	public void method2();
	
}
适配器类:

public class Adapter_Class extends Source implements Target {

	@Override
	public void method2() {
		
		System.out.println("i am method2-class");

	}

}
测试类:

public class Test {
   
	public static void main(String[] args) {
		classAdapter();
	
	}
	
	private static void classAdapter(){
		Target ti=new Adapter_Class();
		ti.method1();
		ti.method2();
	}
}

这样Target接口就扩展实现了Source的功能

2.  对象的适配器模式:

实现思路跟类适配器模式一致,只是适配器类不同。

public class Adapter_Obj implements Target{
    
	private Source s;

	public Adapter_Obj(Source s) {
		super();
		this.s = s;
	}
	
	@Override
	public void method1() {
		
		s.method1();
		
	}
	
	@Override
	public void method2() {
		
		System.out.println("i am method2-obj");
		
	}
		
}

测试类

public class Test {
   
	public static void main(String[] args) {
		
		objAdapter();
		
	}
	private static void objAdapter(){
		Source s=new Source();
		Target ti=new Adapter_Obj(s);
		ti.method1();
		ti.method2();
	}
}

这样同样可以实现Target接口扩展Source功能

3.  接口的适配器模式:

接口的适配器:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。

目标接口:

public interface Target {
   
	public void method1();
	
	public void method2();
	
}
抽象类:

public abstract class AbstractTarget implements Target {
    	
	@Override
	public void method1() {
			
	}
	@Override
	public void method2() {
		
	}	
}
真正需要的类:

public class SourceSub extends AbstractTarget{  
	@Override
	public void method1() {		
		System.out.println("i am sub method1");		
	}	
}
测试类:

public class Test {
   
	public static void main(String[] args) {
		interfaceAdapter();
	}
	
	private static void interfaceAdapter(){
		Target ti=new SourceSub();
		ti.method1();
		ti.method2();
	}
}

测试类中,method1方法虽然可以被调用,但是却没有实现。

4.  小结:

总之适配器模式是一个补偿模式,或者说是一种”补救“模式,用来解决接口不相容的问题。



参考资料:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html






原文地址:https://www.cnblogs.com/elgin-seth/p/5293769.html