适配器模式(五)

来源:互联网 发布:淘宝的创始人是谁啊 编辑:程序博客网 时间:2024/05/19 02:27
适配器模式:将一个类的接口转换成客户希望的另外一个接口,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>




0 0
原创粉丝点击