Android设计模式--适配器模式

我们经常可以看到适配器出现在我们的代码中,如在Android便充分利用了适配器来实现view和数据的联系,如:ListView和BaseAdapter。
我们举一下一个小例子来说明一下适配器模式。
就拿我们首页的图来看,
我们国家的标准电压是220v,而我们笔记本所需的电压就15v左右;所以肯定不可以把我们的交流电直接接到笔记本上,这时,我们得有一个变压器(电源适配器)就可以了,把220v电压转换成15v;

下面介绍一下代码:

笔记本类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 
  * 笔记本
  * @author studyjun
  *
  */
public  class  Jotter {
      
     private  VoltageAdapter adapter;
      
     public  VoltageAdapter getAdapter() {
         return  adapter;
     }
  
     public  void  inputVoltage(){
         System.out.println( "笔记本得到输入电压"  +adapter.transformVoltage()+ "v" );
     }
      
     public  void  setAdapter(VoltageAdapter adapter){
         this .adapter =adapter;
     }
}

供电器220v,提供220v的电压

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 
  * 供电器
  * @author studyjun
  *
  */
public  class  PowerSupplyDevice {
  
     //标准电压
     private  int  standardVoltage = 220 ;
      
      
     /**
      * 输出220v电压
      * @return
      */
     public  int  powerSupply(){
         System.out.println( "标准电压提供220v" );
         return  standardVoltage;
     }
}

适配器接口,有个电压转换接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 
  * 电源适配器
  * @author studyjun
  *
  */
public  interface  VoltageAdapter {
      
     /**
      * 转换电压
      */
     public  int  transformVoltage();
}

笔记本电源适配器类,把220v转为笔记本的15v的电压

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
 
  * 电源适配器
  * @author studyjun
  *
  */
public  class  MyVoltageAdapter  implements  VoltageAdapter{
      
     private  int  voltage;  //电压
     /**
      *  标准电压设备220v
      */
     private  PowerSupplyDevice powerSupplyDevice ;
      
      
     public  MyVoltageAdapter(PowerSupplyDevice powerSupplyDevice) {
         this .powerSupplyDevice = powerSupplyDevice;
     }
  
  
  
     public  int  getVoltage() {
         return  voltage;
     }
  
  
  
     public  void  setVoltage( int  voltage) {
         this .voltage = voltage;
     }
      
     public  PowerSupplyDevice getPowerSupplyDevice() {
         return  powerSupplyDevice;
     }
  
  
  
     public  void  setPowerSupplyDevice(PowerSupplyDevice powerSupplyDevice) {
         this .powerSupplyDevice = powerSupplyDevice;
     }
  
  
     /**
      * 转换电压
      */
     public  int  transformVoltage(){
         int  voltage = powerSupplyDevice.powerSupply();
         int  lowerVoltage = voltage/ 14 ;
         System.out.println( "转化中电压为=" +lowerVoltage+ "v" );
         return  lowerVoltage;
          
     }
}

测试

?
1
2
3
4
5
6
7
8
9
10
11
12
public  class  Test {
      
     public  static  void  main(String[] args) {
          
         Jotter jt =  new  Jotter();
         PowerSupplyDevice powerSupplyDevice =  new  PowerSupplyDevice();
         VoltageAdapter adapter= new  MyVoltageAdapter(powerSupplyDevice);
         jt.setAdapter(adapter);
         jt.inputVoltage();
     }
      
}

执行结果

adapterpatternresult

讲到这里,我们总结一下适配器模式的优点和缺点:
优点:
1、可以将两个不同的接口联系起来,耦合性低。
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
3、灵活性和扩展性都非常好,符合开闭原则

类适配器的缺点:
1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。
对象适配器还有的优点:
2、与类适配器模式相比,要想置换适配者类的方法就不容易。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值