广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >java适配器模式之万物拟人化
  • 112
分享到

java适配器模式之万物拟人化

java适配器模式java设计模式 2019-04-29 23:04:11 112人浏览 猪猪侠
摘要

目录什么是适配器模式类的适配器模式源(Adapee)角色目标(Target)角色适配器(Adaper)角色增加源(Adapee)角色的后果对象的适配器模式增加一个动物接口让源(Adapee)角色的猫猫和狗狗实现动物接口万物拟人适配器(Ada

目录
  • 什么是适配器模式
  • 类的适配器模式
    • 源(Adapee)角色
    • 目标(Target)角色
    • 适配器(Adaper)角色
    • 增加源(Adapee)角色的后果
  • 对象的适配器模式
    • 增加一个动物接口
    • 让源(Adapee)角色的猫猫和狗狗实现动物接口
    • 万物拟人适配器(Adaper)角色
  • 缺省适配模式
    • 目标(Target)角色增加行为声明
    • 适配器(Adaper)角色必须跟着增加行为实现
    • 缺省适配器

什么是适配器模式

以下是百科的解释。

在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

共有两类适配器模式:

  • 类适配器模式:

这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

  • 对象适配器模式:

在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象。

设计模式编程语言无关,但是二当家的依然用Java语言去实战举例。


类的适配器模式

img

  • 源(Adapee)角色:现在需要适配的接口。
  • 目标(Target)角色:这就是所期待得到的接口。注意:由于这里讨论的是类适配器模式,因此目标不可以是类。
  • 适配器(Adaper)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

源(Adapee)角色

二当家喜欢狗狗,所以养了一只狗狗,他有时候会发出叫声。


package com.secondGod.adapter;


public class Dog {
    
    public void makeSound() {
        System.out.println("狗狗:汪汪汪。。。。。。");
    }
}

目标(Target)角色

我们会和朋友聊天说话。


package com.secondgod.adapter;


public interface IFriend {
    
    void speak();
}

适配器(Adaper)角色

过了一段时间,二当家把狗狗当成了朋友,觉得它不是在叫,而是在说话。


package com.secondgod.adapter;


public class DogFriend extends Dog implements IFriend {
    
    @Override
    public void speak() {
        super.makeSound();
    }
}

我们测试一下和狗狗朋友的说话。


package com.secondgod.adapter;


public class Person {
    
    public void speakTo(IFriend friend) {
        System.out.println("人:朋友,你干什么呢?");
        friend.speak();
    }

    public static void main(String[] args) {
        Person  person = new Person();
        IFriend friend = new DogFriend();
        person.speakTo(friend);
    }
}

在这里插入图片描述

二当家的说一句,狗狗叫一声,我们真的像是在聊天。


增加源(Adapee)角色的后果

有一天,二当家的又养了一只猫猫。


package com.secondgod.adapter;


public class Cat {
    
    public void makeSound() {
        System.out.println("猫猫:喵喵喵。。。。。。");
    }
}

过了几天,二当家的和猫猫也成了朋友。这时候只好再多增加一个猫朋友类。


package com.secondgod.adapter;


public class CatFriend extends Cat implements IFriend {
    
    @Override
    public void speak() {
        super.makeSound();
    }
}

二当家的和狗朋友,猫朋友聊天。


package com.secondgod.adapter;


public class Person {
    
    public void speakTo(IFriend friend) {
        System.out.println("人:朋友,你干什么呢?");
        friend.speak();
    }

    public static void main(String[] args) {
        Person  person = new Person();
        IFriend dogFriend = new DogFriend();
        IFriend catFriend = new CatFriend();
        person.speakTo(dogFriend);
        person.speakTo(catFriend);
    }
}

在这里插入图片描述

以后要是二当家的再有其他动物朋友,就需要再去增加适配器类。有没有办法通用一点呢?


对象的适配器模式

二当家的希望可以有一个和各种动物做朋友的办法,而不是每次有了新的动物朋友都需要增加一个适配器。

在这里插入图片描述


增加一个动物接口


package com.secondgod.adapter;


public interface IAnimal {

    
    void makeSound();
}

让源(Adapee)角色的猫猫和狗狗实现动物接口


package com.secondgod.adapter;


public class Dog implements IAnimal {
    
    public void makeSound() {
        System.out.println("狗狗:汪汪汪。。。。。。");
    }
}

package com.secondgod.adapter;


public class Cat implements IAnimal {
    
    public void makeSound() {
        System.out.println("猫猫:喵喵喵。。。。。。");
    }
}

万物拟人适配器(Adaper)角色


package com.secondgod.adapter;


public class AnimalFriendAdaper implements IFriend {
    
    private IAnimal animal;

    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }

    @Override
    public void speak() {
        animal.makeSound();
    }
}

测试我们的万物拟人适配器。


package com.secondgod.adapter;


public class Person {
    
    public void speakTo(IFriend friend) {
        System.out.println("人:朋友,你干什么呢?");
        friend.speak();
    }

    public static void main(String[] args) {
        // 一个人
        Person  person = new Person();
        // 一只狗
        IAnimal dog = new Dog();
        // 一只猫
        IAnimal cat = new Cat();
        // 万物拟人
        person.speakTo(new AnimalFriendAdaper(dog));
        person.speakTo(new AnimalFriendAdaper(cat));
    }
}

在这里插入图片描述

太好了。和动物做朋友轻松多了。因为有了万物拟人的适配器。


缺省适配模式

在这里插入图片描述


目标(Target)角色增加行为声明

有一天,朋友的标准变了。必须得会码砖才行。


package com.secondgod.adapter;


public interface IFriend {
    
    void speak();

    
    void coding();
}

适配器(Adaper)角色必须跟着增加行为实现

修改后的万物拟人适配器


package com.secondgod.adapter;


public class AnimalFriendAdaper implements IFriend {
    
    private IAnimal animal;

    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }

    @Override
    public void speak() {
        animal.makeSound();
    }

    @Override
    public void coding() {
        System.out.println("动物:笑而不语摇摇头。。。。。。");
    }
}

缺省适配器

二当家的想和动物做朋友,但是不想去考虑他们如何码砖,以后二当家的要是和植物做朋友,还得为植物朋友也实现码砖行为,烦哦。所以我们来个默认空实现。


package com.secondgod.adapter;


public abstract class FriendAdaper implements IFriend {
    @Override
    public void speak() {

    }

    @Override
    public void coding() {

    }
}

package com.secondgod.adapter;


public class AnimalFriendAdaper extends FriendAdaper {
    
    private IAnimal animal;

    public AnimalFriendAdaper(IAnimal animal) {
        this.animal = animal;
    }

    @Override
    public void speak() {
        animal.makeSound();
    }
}

由于多了一个默认实现,我们就不需要为万物适配器实现码砖行为了。

适配器模式的用意是要改变源的接口,以便于目标接口相容。缺省适配的用意稍有不同,它是为了方便建立一个不平庸的适配器类而提供的一种平庸实现。

在任何时候,如果不准备实现一个接口的所有方法时,就可以使用“缺省适配模式”制造一个抽象类,给出所有方法的平庸的具体实现。这样,从这个抽象类再继承下去的子类就不必实现所有的方法了。

到此这篇关于java适配器模式之万物拟人化的文章就介绍到这了,更多相关java适配器模式内容请搜索编程界以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程界!

--结束END--

本文标题: java适配器模式之万物拟人化

本文链接: https://www.lsjlt.com/news/75.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java适配器模式之万物拟人化
    目录什么是适配器模式类的适配器模式源(Adapee)角色目标(Target)角色适配器(Adaper)角色增加源(Adapee)角色的后果对象的适配器模式增加一个动物接口让源(Adapee)角色的猫猫和狗狗实现动物接口万物拟人适配器(Ada...
    99+
    2019-04-29
    java适配器模式 java设计模式
  • Java设计模式之适配器模式
    本文通过老王使用纸质书籍阅读小王使用电子书籍的故事,详细说明设计模式中的结构型设计模式之适配器模式,分别对对象适配器和类适配器代码实现,最后为了加深理解,会列举适配器设计模式在JDK...
    99+
    2022-11-13
  • java设计模式之浅谈适配器模式
    目录一、结构型模式二、适配器模式三、什么是适配器模式?四、角色分析五、对象适配器有哪些优点六、类适配器缺点七、使用场景一、结构型模式 结构型模式有什么好处? 从程序的结构上实现松耦合...
    99+
    2022-11-12
  • Java 设计模式之适配器模式详解
    目录定义结构图使用场景代码实现Java代码实现Python代码实现定义 适配器将一个类的接口,转换成客户期望另一个接口。适配器让原本不兼容的类可以合作无间 结构图 如图所示,两脚插...
    99+
    2022-11-12
  • java 设计模式之适配器模式的详解
    java 设计模式之适配器模式的详解前言:      适配器模式(Adapter Pattern)又叫做变压器模式,也叫做包装模式。包装模式还包括装饰模式。  ...
    99+
    2023-05-31
    java 适配器 ava
  • 详解Java实践之适配器模式
    目录一、前言二、适配器模式介绍三、案例场景模拟3.1、场景模拟工程3.2、场景简述3.2.1、注册开户MQ3.2.2、内部订单MQ3.2.3、第三方订单MQ3.2.4、查询用户内部下...
    99+
    2022-11-12
  • 深入理解Java设计模式之适配器模式
    目录一、什么是适配器模式二、适配器模式的结构三、适配器模式的使用场景四、适配器模式的优缺点五、适配器模式的实现1.类适配器模式2.对象适配器模式六、适配器模式的.NET应用总结一、什...
    99+
    2022-11-12
  • Java设计模式之适配器模式的示例详解
    目录定义分类案例需求方案一:类适配器方案二:对象适配器方案三:接口适配器对比分析方案一:类适配器方案二:对象适配器方案三:接口适配器总结 定义 适配器模式,即将某个类的接口转换成客户...
    99+
    2022-11-13
  • Java结构型设计模式之适配器模式详解
    目录适配器模式分类应用场景优缺点主要角色类适配器创建目标角色(Target)创建源角色(Adaptee)创建适配器(Adapter)客户端调用对象适配器创建目标角色(Target)创...
    99+
    2022-11-13
  • Java设计模式解析之适配器模式怎么实现
    本篇内容介绍了“Java设计模式解析之适配器模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是适配器模式:适配器模式主要用...
    99+
    2023-06-30
  • Java通俗易懂系列设计模式之适配器模式
    目录介绍结构类图对象适配器类适配器实例类适配器实现对象适配器实现测试demo类适用场景总结今天看了部特工电影,里面有个桥段,主角在直升机上和反派生死搏斗,而飞机则是无人驾驶的状态,有...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作