适配器模式(五)

适配器模式:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使原本由于接口不兼容而不能在一起工作的类可以一起工作.
开发按人员经常遇到这样的问题:比如一个开发小组a开发的系统中有一个A接口,该接口中有一个方法methodA(),并且已经有类实现了此接口,
即A接口可以回调实现A接口的类的methodA()方法,同时还有一个开发小组b开发的系统中有一个B接口,该接口中有个方法methodB(),并且已经有类实现了此接口,
即B接口可以回调实现B接口的类的methodB()方法.现在用户有了新的需求,希望通过A接口回调B接口的methodB()方法,面对这样的问题,不用担心,
适配器是将一个类的接口(被适配者)转换成客户希望的另外一个接口(目标)的成熟模式,该模式中包含目标,被适配者和适配器.
适配器模式的关键是建立一个适配器,且这个适配器实现了目标接口并包含有被适配者的引用.
结合上面的问题,为了能在A接口变量回调B接口定义的方法,开发小组a在系统中添加了一个适配器AdapterA,AdpaterA实现了A接口,并包含有B接口的变量,
这样一来,A接口变量在回调AdapterA适配器实现了A接口的方法过程中,通过委托B接口变量回调B接口中的方法.
适配器模式结构中包括三个角色:
目标:目标是一个接口类,该接口是客户想使用的接口.
被适配者:被适配者是一个已经存在的接口或抽象类,这个接口或抽象类需要适配.
适配器:适配器是一个类,该类实现了目标接口并包含有被适配者的引用,即适配器的职责是对被适配者(接口或抽象类)与目标接口进行适配.
应用场景一:
某用户有一个电视,并且都是插在二相插座上工作,现在用户又有了一个三相插座,并且想通过三相插座来使用电视,请提供解决方案.

1.被适配者,直接看代码Adaptee,AdapteeOne.

<span style="font-size:12px;">package com.ilucky.pattern.adapter.one;

/**
 * @author IluckySi
 * @date 20140622
 * 模拟二相插座.
 */
public interface Adaptee {

	public abstract void connectElectric();
}</span>
<pre name="code" class="java"><span style="font-size:12px;">package com.ilucky.pattern.adapter.one;

/**
 * @author IluckySi
 * @date 20140622
 * 模拟电视机.
 */
public class AdapteeOne implements Adaptee {

	public void connectElectric() {
		System.out.println("电视机正在使用二相插座播放三国演义!");
	}
}
</span>

 

2.目标:直接看代码Target,TargetOne.

<span style="font-size:12px;">package com.ilucky.pattern.adapter.one;

/**
 * @author IluckySi
 * 模拟三相插座.
 */
public interface Target {

	public abstract void connectElectric();
}
</span>
<span style="font-size:12px;">package com.ilucky.pattern.adapter.one;

/**
 * @author IluckySi
 * @date 20140628
 */
public class TargetOne implements Target {

	public void connectElectric() {
		System.out.println("电视机正在使用三相插座播放三国演义!");
	}
}</span>

3.适配器,直接看代码Adapter.

<span style="font-size:12px;">package com.ilucky.pattern.adapter.one;

/**
 * @author IluckySi
 * @date 20140622
 */
public class Adapter implements Target {

	private Adaptee apdatee;

	public Adapter(Adaptee adaptee) {
		this.apdatee = adaptee;
	}
	
	public void connectElectric() {
		apdatee.connectElectric();
	}
}</span>

4.最后看测试类MainTest.
<span style="font-size:12px;">package com.ilucky.pattern.adapter.one;

/**
 * @author IluckySi
 * @date 20140621
 */
public class MainTest {

	public static void main(String[] args) {
		
		//使用二相插座.
		Adaptee adapteeOne = new AdapteeOne();
		adapteeOne.connectElectric();
		
		//使用三相插座.
		Target targetOne = new TargetOne();
		targetOne.connectElectric();
		
		//适配三相插座.
		Adapter adapterOne = new Adapter(adapteeOne);
		adapterOne.connectElectric();
	}
}
/**
输出结果:
电视机正在使用二相插座播放三国演义!
电视机正在使用三相插座播放三国演义!
电视机正在使用二相插座播放三国演义!
*/</span>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值