适配器模式(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);
}

最新文章

  1. [SL] Silverlight + WCF Demo项目
  2. IOS多媒体
  3. ASP.NET MVC获取微信返回的json数据分页
  4. MySQL数据导出与导入
  5. CSS强制性换行word-break与word-wrap的使用
  6. 【PHP设计模式 11_QiaoJie.php】桥接模式(针对 二维模型)
  7. file类之目录
  8. 非ROOT用户启动Tomcat
  9. Java远程方法调用(RMI)
  10. Sql狗血的Bit类型赋值与取值
  11. ANDROID_MARS学习笔记_S01原始版_021_MP3PLAYER001_下载mp3文件
  12. async 函数
  13. windows下搭建nginx+php+laravel开发环境(转)
  14. @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
  15. django 获取错误信息
  16. Java基础知识_毕向东_Java基础视频教程笔记(13 字符)
  17. JS选取DOM元素的方法
  18. Python学习---django多对多之Djanog默认表学习
  19. 转:linux关闭防火墙iptables
  20. Android——Activity初学

热门文章

  1. [bug] redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused
  2. github祥解
  3. ltp循环跑
  4. Linux PATH环境变量及作用(初学者必读)
  5. Ansible_管理事实(Fact)
  6. Linux进阶之进程管理
  7. STM32的时钟系统RCC详细整理(转载)
  8. STM32独立看门狗(IWDG)
  9. MyBatis 模糊查询的 4 种实现方式
  10. Jlink固件更新