前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式--适配器模式

设计模式--适配器模式

作者头像
HUC思梦
发布2020-09-03 16:47:41
3060
发布2020-09-03 16:47:41
举报

代码演示

鸭子接口:

代码语言:javascript
复制
package com.java.jikexueyuan.adaptermode.duck;

public interface Duck {
    public void quack();
    public void fly();
}

绿头鸭实现鸭子接口;

代码语言:javascript
复制
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");
    }

}

火鸡接口:

代码语言:javascript
复制
package com.java.jikexueyuan.adaptermode.turkey;

public interface Turkey {

    public void gobble();
    public void fly();

}

火鸡实现类:

代码语言:javascript
复制
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");
    }

}

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

代码语言:javascript
复制
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();  //模拟鸭子飞的远
        }
    }

}

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

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

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

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

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

对象适配器与类适配器

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

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

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

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

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

适配器:

代码语言:javascript
复制
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();
    }
}

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

代码语言:javascript
复制
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();
    }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码演示
  • 对象适配器与类适配器
  • 实例:从枚举器到迭代器的适配
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档