计划模式-适配器模式

[复制链接]
发表于 2025-11-2 01:06:07 | 显示全部楼层 |阅读模式
一、界说

适配器模式可以将一个类的接口转换成客户盼望的另一个接口,适配器让本来不兼容的类可以互助无间。
举一个生存中常见的例子,比如手机上的TypeC接口转3.5mm的二级插口的转换器,就是一个适配器,让差别的物理接口可以正常互助。
在现实的开辟中,我们大概碰到体系中盼望的接口和第三方提供的接口不划一,这时就可以通过适配器来转化,而不必要更改体系中已有的代码和第三方的代码,就像下图如许:
一、界说

适配器模式可以将一个类的接口转换成客户盼望的另一个接口,适配器让本来不兼容的类可以互助无间。
举一个生存中常见的例子,比如手机上的TypeC接口转3.5mm的二级插口的转换器,就是一个适配器,让差别的物理接口可以正常互助。
在现实的开辟中,我们大概碰到体系中盼望的接口和第三方提供的接口不划一,这时就可以通过适配器来转化,而不必要更改体系中已有的代码和第三方的代码,就像下图如许:

二、实现

下面通过一个简单的例子来实现适配器模式,有一个鸭子接口、一个火鸡接口,现在鸭子的实现类不投用了,我们想用火鸡来假冒鸭子,就可以通过一个适配器来实现
鸭子接口中的叫是quack方法:
  1. public interface Duck {
  2.     /**
  3.      * 叫
  4.      */
  5.     void quack();
  6. }
  7. //一个实现类
  8. public class GaDuck implements Duck{
  9.     /**
  10.      * 叫
  11.      */
  12.     @Override
  13.     public void quack() {
  14.         System.out.println("嘎嘎叫");
  15.     }
  16. }
复制代码
火鸡接口中的叫是gobble方法:
  1. public interface Turkey {
  2.     void gobble();
  3. }
  4. //一个实现类
  5. public class GeTurkey implements Turkey{
  6.     @Override
  7.     public void gobble() {
  8.         System.out.println("咯咯叫");
  9.     }
  10. }
复制代码
要让火鸡来假冒鸭子,适配器必要实现鸭子接口方法,然后在鸭子独有的方法中调用火鸡独有的方法
  1. public class TurkeyAdapter implements Duck{
  2.     private Turkey turkey;
  3.     public TurkeyAdapter(Turkey turkey) {
  4.         this.turkey = turkey;
  5.     }
  6.    
  7.     @Override
  8.     public void quack() {
  9.         this.turkey.gobble();
  10.     }
  11. }
复制代码
测试:
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         test();
  4.     }
  5.     static void test(){
  6.         Duck gaDuck = new GaDuck();
  7.         Turkey geTurkey = new GeTurkey();
  8.         Duck turkeyAdapter = new TurkeyAdapter(geTurkey);
  9.         System.out.println("嘎嘎鸭叫:");
  10.         testDuck(gaDuck);
  11.         System.out.println("伪装成鸭子的火鸡叫:");
  12.         testDuck(turkeyAdapter);
  13.     }
  14.     //测试鸭子
  15.     static void testDuck(Duck duck){
  16.         duck.quack();
  17.     }
  18. }
  19. //输出
  20. 嘎嘎鸭叫:
  21. 嘎嘎叫
  22. 伪装成鸭子的火鸡叫:
  23. 咯咯叫
复制代码
可以看到,详细的流程是如许的:

  • 客户端testDuck(Duck duck)方法调用适配器中Duck接口的方法
  • 适配器吸收到哀求,将会调用被适配者Turkey的方法
  • 客户端收到了调用结果,但是并未察觉到适配器的作用
二、实现

下面通过一个简单的例子来实现适配器模式,有一个鸭子接口、一个火鸡接口,现在鸭子的实现类不投用了,我们想用火鸡来假冒鸭子,就可以通过一个适配器来实现
鸭子接口中的叫是quack方法:
  1. public interface Duck {
  2.     /**
  3.      * 叫
  4.      */
  5.     void quack();
  6. }
  7. //一个实现类
  8. public class GaDuck implements Duck{
  9.     /**
  10.      * 叫
  11.      */
  12.     @Override
  13.     public void quack() {
  14.         System.out.println("嘎嘎叫");
  15.     }
  16. }
复制代码
火鸡接口中的叫是gobble方法:
  1. public interface Turkey {
  2.     void gobble();
  3. }
  4. //一个实现类
  5. public class GeTurkey implements Turkey{
  6.     @Override
  7.     public void gobble() {
  8.         System.out.println("咯咯叫");
  9.     }
  10. }
复制代码
要让火鸡来假冒鸭子,适配器必要实现鸭子接口方法,然后在鸭子独有的方法中调用火鸡独有的方法
  1. public class TurkeyAdapter implements Duck{
  2.     private Turkey turkey;
  3.     public TurkeyAdapter(Turkey turkey) {
  4.         this.turkey = turkey;
  5.     }
  6.    
  7.     @Override
  8.     public void quack() {
  9.         this.turkey.gobble();
  10.     }
  11. }
复制代码
测试:
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         test();
  4.     }
  5.     static void test(){
  6.         Duck gaDuck = new GaDuck();
  7.         Turkey geTurkey = new GeTurkey();
  8.         Duck turkeyAdapter = new TurkeyAdapter(geTurkey);
  9.         System.out.println("嘎嘎鸭叫:");
  10.         testDuck(gaDuck);
  11.         System.out.println("伪装成鸭子的火鸡叫:");
  12.         testDuck(turkeyAdapter);
  13.     }
  14.     //测试鸭子
  15.     static void testDuck(Duck duck){
  16.         duck.quack();
  17.     }
  18. }
  19. //输出
  20. 嘎嘎鸭叫:
  21. 嘎嘎叫
  22. 伪装成鸭子的火鸡叫:
  23. 咯咯叫
复制代码
可以看到,详细的流程是如许的:

  • 客户端testDuck(Duck duck)方法调用适配器中Duck接口的方法
  • 适配器吸收到哀求,将会调用被适配者Turkey的方法
  • 客户端收到了调用结果,但是并未察觉到适配器的作用

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表