设计模式学习笔记(2)-适配器模式

Adapter的模式的作用主要是调整某个类的接口,使其适应于现有架构。

实现要点:

1.定义一个适配类,实现需要适配成的接口(或者继承现有的类)。

2.在适配类中持有一个被适配对象,在适配接口中调用适配对象的方法。

 1 public class Switch {
 2     Switchable switchDevice;
 3     public void setSwitchDevice(Switchable switchDevice) {
 4         this.switchDevice = switchDevice;
 5     }
 6     public void checked() {
 7         switchDevice.turnOn();
 8     }
 9     
10     public void unChecked() {
11         switchDevice.turnOff();
12     }
13 }
14 public interface Switchable {
15     void turnOn();
16     void turnOff();
17 }
18 public class Light implements Switchable{
19     private String name;
20     public Light(String name) {
21         this.name = name;
22     }
23     public void turnOn() {
24         System.out.println("turn on light = " + name);
25     }
26     public void turnOff() {
27         System.out.println("turn off light = " + name);
28     }
29 }
30 public class Fan {
31     private int id;
32     public Fan(int id) {
33         this.id = id;
34     }
35     public void open() {
36         System.out.println("open id = " + id);
37     }
38     
39     public void close() {
40         System.out.println("close id = " + id);
41     }
42 }
43 
44 
45 public class FanAdapter implements Switchable {
46     private Fan fan;
47     
48     public FanAdapter(int id) {
49         fan = new Fan(id);
50     }
51 
52     @Override
53     public void turnOn() {
54         fan.open();
55         
56     }
57 
58     @Override
59     public void turnOff() {
60         fan.close();   
61     }
62 }
63 
64 public class Test {
65     public static void main(String[] args) {
66         Switch lightSwitch = new Switch();
67         lightSwitch.setSwitchDevice(new Light("reading lamp"));
68         lightSwitch.checked();
69         lightSwitch.unChecked();
70         
71         Switch fanSwitch = new Switch();
72         fanSwitch.setSwitchDevice(new FanAdapter(226));
73         fanSwitch.checked();
74         fanSwitch.unChecked();
75 
76     }
77 
78 }

在上面的例子中,假设 Switch 和 Switchable 及 Light是现有的类, 而Fan是第三方提供的一种设备的代码。可以看到Fan的方法和现有设计接口不同,假设没有办法直接修改Fan的代码。因此创建了FanAdapter去将Fan的接口适配成我们需要的接口,这样就可以避免修改我们现有的设计。

 

posted @ 2013-12-12 23:51  adgkns  阅读(127)  评论(0编辑  收藏  举报