适配器设计模式-Adapter

首先我们想象一下我们的生活,我们在充电的时候常常会用到适配器,如果我的手机充电线是usb接口的,但是插座是2相或者3相的插座,肯定不能直接将USB插到插座里,就需要一个适配器将2或3相的转换成我们需要的接口(USB)进行运用,我们再将线插入适配器里充电。还有很多类似的例子。

适配器分3种 类的适配器 对象适配器 接口适配器

只有一个总的目的:我们把我们的手机看做是客户端,它的目的就是将某个类的接口,转换成客户端期望的一个接口,消除类的不匹配所造成的兼容性问题。

1类的适配器:

需求 手机充电 

待适配的插座:PowerSource

客户端期望的接口(适配器上的USB接口):PowerTagtable   

适配器:Adapter

测试类客户端:iphoneAdapterTest 

类图:

代码:

package leiadapter;

public class PowerSource {
	public void method1(){
		System.out.println("sourcemethod1 插座充电中");
	}
}


package leiadapter;

public interface PowerTagtable {
	public void method2();	
	//接口保留原来的方法
	public void method1();
}

package leiadapter;

public class Adapter extends PowerSource implements PowerTagtable  {
	//调用新的方法
	@Override
	public void method2(){
		System.out.println("USB 充电中");
	}
	//调用父类原来的方法
	@Override
	public void method1() {
		// TODO Auto-generated method stub
		super.method1();
	}
	
	
}

package leiadapter;

public class IphoneAdapterTest {
	public static void main(String[] args) {
		PowerTagtable powerTagtable = new Adapter();
		//调用新的method2 
		powerTagtable.method2();
	}
}

2对象适配器

和类的适配器极为相似,不同在于Adapter持有 PowerSource的对象:

类图:

代码:

package leiadapter;

public class PowerSource {
	public void method1(){
		System.out.println("sourcemethod1 插座充电中");
	}
}

package leiadapter;

public interface PowerTagtable {
	public void method2();	
	//接口保留原来的方法
	public void method1();
}

package duixiangadapter;
/*
 * 不再继承源了
 */
public class Adapter implements PowerTagtable  {
	private PowerSource powerSource;
	
	public Adapter(PowerSource source) {
		this.powerSource = source;
	}
	//调用新的方法
	@Override
	public void method2(){
		System.out.println("USB 充电中");
	}
	//调用父类原来的方法
	@Override
	public void method1() {
		powerSource.method1();
	}
	
}

package duixiangadapter;

public class IphoneAdapterTest {
	public static void main(String[] args) {
		PowerSource powerSource  = new PowerSource();
		PowerTagtable powerTagtable = new Adapter(powerSource);
		//调用新的method2 
		powerTagtable.method2();
	}
}


3接口适配器设计模式 也叫缺省适配器设计模式

图 懒得画了

我们实现接口的时候,如果有时候不想全部实现所有方法,就可以用抽象类,用抽象类实现所有方法,然后用适配器类去继承想要实现的方法

package jiekouadapter;

public interface SourceInterface {
	public void method1();
	public void method2();
	public void method3();
	public void method4();
	public void method5();
	
}


package jiekouadapter;

public abstract class AdapterAbstract implements SourceInterface {

	@Override
	public void method1() {
		
	}

	@Override
	public void method2() {
		
	}

	@Override
	public void method3() {
		
	}

	@Override
	public void method4() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method5() {
		// TODO Auto-generated method stub
		
	}
	
}

package jiekouadapter;

public class Adapter1 extends AdapterAbstract {

	@Override
	public void method1() {
		System.out.println("m1");
	}

	@Override
	public void method3() {
		System.out.println("m3");
	}

}

package jiekouadapter;

public class Adapter2 extends AdapterAbstract {

	@Override
	public void method2() {
	System.out.println("m2");
	}

	@Override
	public void method5() {
		System.out.println("m5");
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值