设计模式(五)适配器模式

适配器模式将一个类的接口,转换成客户期望的另外的一个接口与。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

如目标接口是二插头,而被适配类是三插头,那么适配器就是三插转二插。

组合方式

package com.immoc.pattern.adapter;
/*
 * 三相插座接口
 */
public interface ThreePlugIf {
	
	//使用三相电流供电
	public void powerWithThree();
}
package com.immoc.pattern.adapter;

public class GBTwoPlug {
	
	//使用二相电流供电
	public void powerWithTwo(){
		System.out.println("使用二相电流供电");
	}
}

适配器

package com.immoc.pattern.adapter;
/*
 * 二相转三相的插座适配器
 */

public class TwoPlugAdapter implements ThreePlugIf {

	private GBTwoPlug plug;
	
	public TwoPlugAdapter(GBTwoPlug plug){
		this.plug = plug;
	}
	@Override
	public void powerWithThree() {
		System.out.println("通过转化");
		plug.powerWithTwo();

	}

}
package com.immoc.pattern.adapter;

public class NoteBook {

	private ThreePlugIf  plug;
	
	public NoteBook(ThreePlugIf plug){
		this.plug = plug;
	}
	
	//使用插座充电
	public void charge(){
		plug.powerWithThree();
	}
	
	public static void main(String[] args) {
		GBTwoPlug two =  new GBTwoPlug();
		ThreePlugIf three = new TwoPlugAdapter(two);
		NoteBook nb = new NoteBook(three);
		nb.charge();
		
	

	}

}

创建一个三插,一个二插,一个适配器。之后二插转三插。最后调用方法充电

继承方式

package com.immoc.pattern.adapter;

/*
 * 采用继承方式的插座适配器
 */
public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf {

	@Override
	public void powerWithThree() {
		System.out.print("借助继承适配器");
		this.powerWithTwo();

	}

}

可以看到,继承了二插,实现了三插。

外面调用是用三插,可是里面的方法this.powerWithTwo();却调用了二插。这就是一个适配器

怎么调用

package com.immoc.pattern.adapter;

public class NoteBook {

	private ThreePlugIf  plug;
	
	public NoteBook(ThreePlugIf plug){
		this.plug = plug;
	}
	
	//使用插座充电
	public void charge(){
		plug.powerWithThree();
	}
	
	public static void main(String[] args) {
		ThreePlugIf three ;
		three = new TwoPlugAdapterExtends();
		nb = new NoteBook(three);
		nb.charge();

	}

}

可以看到,继承有一定的弊端,如果三插有子类圆孔三插的话,怎么办?只能重新写一个适配器,实现这个子类。

猜你喜欢

转载自blog.csdn.net/xu505928168/article/details/90522768