纵有疾风起
人生不言弃

设计模式–适配器模式


代码演示

鸭子接口:

package com.java.jikexueyuan.adaptermode.duck;public interface Duck {    public void quack();    public void fly();}

绿头鸭实现鸭子接口;

package com.java.jikexueyuan.adaptermode.duck;public class GreenHeadDuck implements Duck {    @Override    public void quack() {        // TODO Auto-generated method stub        System.out.println(" Ga Ga");    }    @Override    public void fly() {        // TODO Auto-generated method stub        System.out.println("I am flying a long distance");    }}

火鸡接口:

package com.java.jikexueyuan.adaptermode.turkey;public interface Turkey {    public void gobble();    public void fly();}

火鸡实现类:

package com.java.jikexueyuan.adaptermode.turkey;public class WildTurkey implements Turkey {    @Override    public void gobble() {        // TODO Auto-generated method stub        System.out.println(" Go Go");    }    @Override    public void fly() {        // TODO Auto-generated method stub        System.out.println("I am flying a short distance");    }}

适配器对外展示的是鸭子的形式,所以实现鸭子的接口

package com.java.jikexueyuan.adaptermode.adapter;import com.java.jikexueyuan.adaptermode.duck.Duck;import com.java.jikexueyuan.adaptermode.turkey.Turkey;public class TurkeyAdapter implements Duck {    private Turkey turkey;        public TurkeyAdapter(Turkey turkey)    {        this.turkey=turkey;    }    @Override    public void quack() {        // TODO Auto-generated method stub        turkey.gobble();    }    @Override    public void fly() {        // TODO Auto-generated method stub        for(int i=0;i<6;i++)        {            turkey.fly();  //模拟鸭子飞的远        }    }}

 

适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容

设计模式–适配器模式插图

从用户的角度看不到被适配者,是解耦的

用户调用适配器转化出来的目标接口方法

适配器再调用被适配者的相关接口方法

用户收到反馈结果,感觉只是和目标接口交互

 

对象适配器与类适配器

类适配器:通过多重继承目标接口和被适配者类方式来实现适配

设计模式–适配器模式插图(1)

多重继承,其中继承的目标接口部分达到适配目的,而继承被适配者类的部分达到通过调用被适配者类里的方法来实现目标接口的功能

对象适配器与类适配器差异

设计模式–适配器模式插图(2)

对象适配器和类适配器使用了不同的方法实现适配,对象适配器使用组合,类适配器使用继承.

使用类适配器重新实现上边的例子:

适配器:

package com.java.jikexueyuan.adaptermode.adapter;import com.java.jikexueyuan.adaptermode.duck.Duck;import com.java.jikexueyuan.adaptermode.turkey.WildTurkey;public class TurkeyAdapter2 extends WildTurkey implements Duck {    @Override    public void quack() {        // TODO Auto-generated method stub        super.gobble();    }    @Override    public void fly() {        // TODO Auto-generated method stub        super.fly();        super.fly();        super.fly();    }}

 

实例:从枚举器到迭代器的适配

package com.java.jikexueyuan.adaptermode.adapter;import java.util.Enumeration;import java.util.Iterator;public class EnumerationIterator implements Iterator<Object> {    private Enumeration enumeration;        public EnumerationIterator(Enumeration enumeration)    {         this.enumeration= enumeration;    }        @Override    public boolean hasNext() {        // TODO Auto-generated method stub        return enumeration.hasMoreElements();    }    @Override    public Object next() {        // TODO Auto-generated method stub        return enumeration.nextElement();    }    @Override    public void remove() {        // TODO Auto-generated method stub        throw new UnsupportedOperationException();    }}

 

文章转载于:https://www.cnblogs.com/lm970585581/p/9650769.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 设计模式–适配器模式

分享到: 生成海报
avatar

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活