Java设计模式之适配器模式

摘自《Header First设计模式》文中的源码

定义一个鸭子的模型接口:

Duck.java

/*
 * 鸭子实现了Duck的接口,具备呱呱叫和飞行的能力
 */
public interface Duck
{
    public void quack();

    public void fly();
}

定义一个火鸡的模型接口:

Turkey.java

/*
 * 介绍新的街头冠禽
 */
public interface Turkey
{
     void gobble();//火鸡不会呱呱叫,只会咯咯gobble叫

     void fly();//火鸡会飞,但是非不远
}

 

绿头鸭Mallard的实现

MallardDuck.java

/*
 * 绿头鸭Mallard是鸭子的子类,这里可以实现quack和fly
 */
public class MallardDuck implements Duck
{
    public void quack()
    {
        System.out.println("quack!quack!");
    }

    public void fly()
    {
        System.out.println("I can fly");
    }
}

 

一个火鸡的实现

WildTurkey.java

/*
 * 一个火鸡的具体实例
 *
 * 现在,假设你却鸭子对象,想用一些火鸡来冒充鸭子的对象
 * 显而易见,因为火鸡的接口不同,所以我们不能公然拿来冒充
 */
public class WildTurkey implements Turkey
{
    public void gobble()
    {
        System.out.println("gobble!gobble!");
    }

    public void fly()
    {
        System.out.println("I'm  flying a short distance!");
    }
}

定义一个适配器类

TurkeyAdapter.java

/*
 *首先,这里需要实现要转换的类型接口,
 * 也就是客户所期待看到的接口
 *
 */
public class TurkeyAdapter implements Duck
{

    Turkey turkey;

    /*
     * 接着,这里需要取得适配的引用对象,这里利用构造器取得这个引用。
     */
    public TurkeyAdapter(Turkey turkey)
    {
        this.turkey = turkey;
    }


    /*
     * 现在需要实现接口里的所有方法,
     * quack()实现方式很简单,只需要调用gobble()方法即可
     */
    public void quack()
    {
        this.turkey.gobble();
    }

    @Override
    /*
     * 虽然两个接口都有fly()方法,但是火鸡的飞行距离很短,不像鸭子可以长途飞行,
     * 要让鸭子与火鸡的飞行能够对应,必须连续5次调用火鸡的fly()方法来完成
     */
    public void fly()
    {
        int i;
        for (i = 0; i < 5; i++) {
            this.turkey.fly();
        }
    }
}

测试适配器功能:

DuckTestDrive.java

public class DuckTestDrive {

    public static void main(String[] args) {
        MallardDuck duck = new MallardDuck();//创建一只鸭子
        WildTurkey turkey = new WildTurkey();//创建一只火鸡
        Duck turkeyAdapter = new TurkeyAdapter(turkey);

        System.out.println("The Turkey says: ");
        testTurkey(turkey);
        System.out.println("");

        System.out.println("The Duck says: ");
        testDuck(duck);
        System.out.println("");

        System.out.println("The TurkeyAdapter says: ");
        testDuck(turkeyAdapter);
    }

    public static void testTurkey(Turkey turkey) {
        turkey.fly();
        turkey.gobble();
    }

    public static void testDuck(Duck duck) {
        duck.fly();
        duck.quack();
    }
}

 

校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题, 与传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前与用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆食堂。 拾领校园失物招领小程序继承了寻物启事失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,类别、地点等相关信息, 并且可以填写手机号开启认领验证,并可以一键生成二维码分享或分享至群聊朋友圈。 列表内可以筛选物品类别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报分享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值