一天一个设计模式之适配器模式(Adapter)

转载 专栏收录该内容
2 篇文章 0 订阅

点击打开链接

 适配器模式,属于结构型模式,其主要作用是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适用情况:

以下情况使用适配器模式
• 你想使用一个已经存在的类,而它的接口不符合你的需求。
• 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
• (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
 

其实现方式主要有两种:
类适配器


 

对象适配器

其中:
• Target
— 定义Client使用的与特定领域相关的接口。
• Client
— 与符合Ta rg e t接口的对象协同。
• Adaptee
— 定义一个已经存在的接口,这个接口需要适配。
• Adapter 
— 对Adaptee的接口与Target接口进行适配


具体的实现代码如下:
类适配器

 
  1. package com.visionsky.DesignPattern; 
  2.  
  3. interface Target { 
  4.     void Request(); 
  5.  
  6. class Adaptee { 
  7.     void SpecificRequst() { 
  8.         System.out.println("Adaptee's SpecificRequst"); 
  9.     } 
  10.  
  11. class Adapter extends Adaptee implements Target  
  12.  
  13.     @Override 
  14.     public void Request() { 
  15.          System.out.println("Adapter's Request"); 
  16.           super.SpecificRequst(); 
  17.     } 
  18.  
  19.  
  20. public class AdapterDemo { 
  21.  
  22.     /** 
  23.      * @param args 
  24.      */ 
  25.     public static void main(String[] args) { 
  26.         // TODO Auto-generated method stub 
  27.         Target t=new Adapter(); 
  28.         t.Request(); 
  29.     } 
  30.  

 对象适配器

 
  1. package com.visionsky.DesignPattern; 
  2.  
  3. interface Target { 
  4.     void Request(); 
  5.  
  6. class Adaptee { 
  7.     void SpecificRequst() { 
  8.         System.out.println("Adaptee's SpecificRequst"); 
  9.     } 
  10.  
  11. class Adapter  implements Target  
  12.  
  13.     private Adaptee adaptee; 
  14.     public Adapter() 
  15.     { 
  16.         this.adaptee=new Adaptee(); 
  17.     } 
  18.      
  19.     @Override 
  20.     public void Request() { 
  21.          System.out.println("Adapter's Request"); 
  22.          adaptee.SpecificRequst(); 
  23.     } 
  24.  
  25.  
  26. public class AdapterDemo { 
  27.  
  28.     /** 
  29.      * @param args 
  30.      */ 
  31.     public static void main(String[] args) { 
  32.         // TODO Auto-generated method stub 
  33.         Target t=new Adapter(); 
  34.         t.Request(); 
  35.     } 
  36.  

生活中的例子:
在生活中最简单的例子就是电源适配器,如手机适配器,我们的家用电源是220V的,但是,对于手机来说,根本大不了这么多,所以,在这种情况下,需要电源适配器来为我们提供适合手机的电压。
 

 
  1. package com.visionsky.DesignPattern; 
  2.  
  3. public class AdaterDemoInLife { 
  4.  
  5.     /** 
  6.      * @param args 
  7.      */ 
  8.     public static void main(String[] args) { 
  9.         // TODO Auto-generated method stub 
  10.         MobilePowerAdapter mpa=new MobilePowerAdapter(); 
  11.         mpa.GetPower10V(); 
  12.     } 
  13.  
  14.  
  15. interface ITarget { 
  16.     int GetPower10V(); 
  17.  
  18. class Power { 
  19.     int GetPower220V() { 
  20.          return 220
  21.     } 
  22.  
  23. class MobilePowerAdapter  implements ITarget  
  24.     private Power power; 
  25.     public MobilePowerAdapter( ) { 
  26.           
  27.         this.power = new Power(); 
  28.     } 
  29.      
  30.     @Override 
  31.     public int GetPower10V() { 
  32.         // TODO Auto-generated method stub 
  33.          power.GetPower220V(); 
  34.          //将220v转变成10v,具体做法就不写了, 大家明白就行 
  35.          return 10
  36.     } 

 


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值