适配器模式(Adapter)

适配器模式涉及到3个角色:要被适配的接口,适配器,目标接口

适配器的工作就是将被适配的接口转换为目标接口

“鸭子类型”就是一个典型的适配器模式:如果它走起来像鸭子,叫起来像鸭子,那么它就是一只鸭子。

适配器模式示例:女儿国只有女人能加入,现在让唐僧加入女儿国

定义要被适配的接口与目标接口

目标接口:女人接口,女人只会唱歌

public interface Female
{
void sing();
}

要被适配的接口:男人接口,男人只会打架

public interface Male
{
void fight();
}

唐僧是一个男人,只会打架,不会唱歌

public class TangSeng implements Male
{
@Override
public void fight()
{
System.out.println("阿弥陀佛");
}
}

现在,女儿国中只有女人才能加入

public class FemaleCountry
{
private final Set<Female> females; public FemaleCountry()
{
this.females=new HashSet<>();
} // 只有女人可以加入
public void join(Female female)
{
females.add(female);
}
}

但是,唐僧一心要加入女儿国,他有什么办法呢?到了适配器出马的时候了

// 适配器实现目标接口
public class MaleAdapter implements Female
{
// 适配器内部包装了要被适配的对象
private Male male; public MaleAdapter(Male male)
{
this.male = male;
} // 表面是在唱歌,实际上是在打架
@Override
public void sing()
{
System.out.println("敢问圣僧,女儿美不美?");
male.fight();
}
}

现在,男人已经可以适配女人接口了,让唐僧加入女儿国

public static void main(String[] args)
{
FemaleCountry country=new FemaleCountry();
// 用适配器包装
MaleAdapter tangseng=new MaleAdapter(new TangSeng());
// 唐僧也会唱歌
tangseng.sing();
// 唐僧也可以加入女儿国
country.join(tangseng); System.out.println(country);
}

Java实现适配器模式的更多相关文章

  1. Java设计模式——适配器模式

    JAVA 设计模式 适配器模式 用途 适配器模式 (Adapter) 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器 ...

  2. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一 ...

  3. JAVA 设计模式 适配器模式

    用途 适配器模式 (Adapter) 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器模式是一种结构型模式. 结构

  4. Java设计模式 - 适配器模式

    概念: 将一个类的接口,转换成客户期望的另一个接口.适配器模式让原来接口不兼容的类可以在一起工作. 解决的问题: 提供类似于中间人的作用:把原本不兼容.不能一起工作的接口组合在一起,使得它们能够在一起 ...

  5. Java模式(适配器模式)【转载】

    转载地址: http://blog.csdn.net/elegant_shadow/article/details/5006175 今天看了下Java中的适配器模式,以下就来小做下总结和谈谈感想,以便 ...

  6. Java模式(适配器模式)

    今天看了下Java中的适配器模式,下面就来小做下总结和谈谈感想,以便日后使用. 首先,先来先讲讲适配器.适配就是由“源”到“目标”的适配,而其中链接两者的关系就是适配器.它负责把“源”过度到“目标”. ...

  7. 设计模式总结(Java)—— 适配器模式

    适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类.适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用.也就是说:当客户 ...

  8. Java设计模式——适配器模式(Adapter)

    目的:把源类型适配为目标类型,以适应客户端(Client)的需求:此处我们把目标接口的调用方视为客户端 使用场景:需要对类型进行由源类型到目标类型转换的场景中 前置条件:已有客户端 //Client ...

  9. java设计模式——适配器模式 Java源代码

    前言:适配器模式就是把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作.通常被用在一个项目需要引用一些开源框架来一起工作时,这些框架的内部都有一 ...

  10. Java的适配器模式

    所谓适配器模式,其实很简单,就是将一个类的接口转换成客户端所期待的另一个接口,使得原本不兼容的两个类可以一起工作. 假设我们有一个Type-c接口,但是要使用的接口确实usb的接口,这时候要怎么办呢? ...

随机推荐

  1. CRM应用中可能发生的问题

    CRM系统是公认的提升企业竞争力的强大工具.它既是以客户为中心的思想,又是一种企业管理方案.当然,它还是一种管理软件.在国外,CRM使企业运营得风生水起,但在我国的企业应用中,还是有着很高的失败率和使 ...

  2. 诸神之眼 - Nmap 教程

    *注: www.heihei.work 为本人测试网站,可由 官方测试网站 scanme.nmap.org代替. NO.11.扫描端口开放的服务nmap -T4 -A -v www.heiehi.wo ...

  3. nosql数据库之Redis持久化、备份和主从配置

    一.持久化方式 Redis提供了两种数据备份的方式,一种是RDB,另外一种是AOF.   RDB AOF 开启/关闭 开启:默认开启:关闭:把配置文件中所有的save注释就是关闭了 开启:在配置文件中 ...

  4. Linux 性能监控工具

  5. STM32F1移植UCOSII

    作者:珵旭媛 下载对应版本的UCOSII https://www.micrium.com/downloadcenter/,你会少修改很多东西: 下载下来后是这样的文件夹,并且Software里面的才是 ...

  6. error – Public key for *.rpm is not installed (--nogpgcheck)

    docker容器删除的东西比较多,有很多东西都没有,配置上源后发现有也问题 第一是源的选择不对应系统版本,第二是找不到gpgcheck文件 如果一时半会找不到gpgchenck file,使用 --n ...

  7. Step By Step(Lua迭代器和泛型for)

    Step By Step(Lua迭代器和泛型for) 1. 迭代器与Closure:    在Lua中,迭代器通常为函数,每调用一次函数,即返回集合中的"下一个"元素.每个迭代器都 ...

  8. 【RMAN】使用RMAN备份将数据库不完全恢复到指定时间点

    RMAN作为Oracle强大的备份恢复工具,可以协助我们恢复数据库到指定时间点,这便是Oracle不完全恢复的一种体现,通过这种方法可以找回我们曾经丢失的数据.这里以找回误TRUNCATE表数据为例给 ...

  9. 设计模式Immutability

    1.什么是Immutability Immutability,不变性, 叫做不变性设计模式,简单来说就是对象一旦创建,状态就不再发生变化. 变量一旦被赋值,就不允许修改了(没有写操作):没有修改操作, ...

  10. Camera噪声问题

    Camera噪声问题 Camera RGB 域的噪声 以上部分属于sensor processing,接下来的部分属于color.luminance processing. gamma gamma是在 ...