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

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

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

 

组合方式

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();

	}

}

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值