博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】—— 适配器模式Adapter
阅读量:6438 次
发布时间:2019-06-23

本文共 2436 字,大约阅读时间需要 8 分钟。

  模式意图

  如果已经有了一种类,而需要调用的接口却并不能通过这个类实现。因此,把这个现有的类,经过适配,转换成支持接口的类。

  换句话说,就是把一种现有的接口编程另一种可用的接口。

  模式结构

  【类的适配器】

  Target 目标接口

  Adaptee 现有的类

  Adapter 中间转换的类,即实现了目标接口,又继承了现有的类。

1 package com.xingoo.test1; 2 interface Target{ 3     public void operation1(); 4     public void operation2(); 5 } 6 class Adaptee{ 7     public void operation1(){ 8         System.out.println("operation1"); 9     }10 }11 12 class Adapter extends Adaptee implements Target{13     public void operation2() {14         System.out.println("operation2");15     }16 }17 18 public class test {19     public static void main(String[] args){20         Target tar = new Adapter();21         tar.operation1();22         tar.operation2();23     }24 }

  【对象的适配器】

  与上面不同的是,这次并不是直接继承现有的类,而是把现有的类,作为一个内部的对象,进行调用。

1 package com.xingoo.test2; 2  3 interface Target{ 4     public void operation1(); 5     public void operation2(); 6 } 7  8 class Adaptee{ 9     public void operation1(){10         System.out.println("operation1");11     }12 }13 14 class Adapter implements Target{15     private Adaptee adaptee;16     public Adapter(Adaptee adaptee){17         this.adaptee = adaptee;18     }19     public void operation1() {20         adaptee.operation1();21     }22 23     public void operation2() {24         System.out.println("operation2");25     }26     27 }28 public class test {29     public static void main(String[] args){30         Target tar = new Adapter(new Adaptee());31         tar.operation1();32         tar.operation2();33     }34 }

  使用场景

  1 想使用一个已经存在的类,但是它的接口并不符合要求

  2 想创建一个可以复用的类,这个类与其他的类可以协同工作

  3 想使用已经存在的子类,但是不可能对每个子类都匹配他们的接口。因此对象适配器可以适配它的父类接口。(这个没理解,以后慢慢琢磨)

  生活中的设计模式

  俗话说,窈窕淑女君子好逑,最近看跑男,十分迷恋Baby。

  但是,如果桃花运浅,身边只有凤姐,那么也不需要担心。

  只需要简单的化妆化妆,PS一下,美女凤姐,依然无可替代!

  

  虽然,没有AngleBaby,但是我们有凤姐,所以依然可以看到AngleBaby甜美的笑。

 

1 package com.xingoo.test3; 2 interface BeautifulGirl{ 3     public void Smiling(); 4 } 5 class UglyGirl{ 6     public void Crying(){ 7         System.out.println("我在哭泣..."); 8     } 9 }10 class ApplyCosmetics implements BeautifulGirl{11     private UglyGirl girl;12     public ApplyCosmetics(UglyGirl girl){13         this.girl = girl;14     }15     public void Smiling() {16         girl.Crying();17     }18 }19 public class test {20     public static void main(String[] args){21         BeautifulGirl girl = new ApplyCosmetics(new UglyGirl());22         girl.Smiling();23     }24 }

  运行结果

我在哭泣...

 

本文转自博客园xingoo的博客,原文链接:,如需转载请自行联系原博主。
你可能感兴趣的文章
发布一个 Linux 下的 C++ 多线程库
查看>>
大数据分布式架构单点故障详解(Hdfs+Yarn+HBase+Spark+Storm)构建HA高可用架构
查看>>
通过Stetho在Chrome上调试Android App
查看>>
presto集群安装&整合hive|mysql|jdbc
查看>>
工行企业网银“您的数据签名有误请联系当地工行”解决办法
查看>>
关于namespace的一点点心得体会(2017年8月3日14:55:37)
查看>>
使用Markdown记录文字
查看>>
Linux TCP 链接状态
查看>>
类的属性、类的方法、类的内置方法
查看>>
Python序列类型
查看>>
再谈ThinkPHP
查看>>
Hibernate问题浅析
查看>>
出现访问apache资源直接下载php文件的解决办法-----yum 安装 php mysql
查看>>
七种Mysql表类型
查看>>
归并与归并排序
查看>>
linux和windows互传文件、用户配置文件和密码配置文件、用户组管理、用户管理...
查看>>
spark 应用程序性能优化经验
查看>>
基于Zabbix IPMI监控服务器硬件状况
查看>>
Go语言之并发资源竞争
查看>>
GNS帧中继配置,帧中继环境搭建
查看>>