设配器模式

适配器模式要达到的目的:在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

1.类图


2.具体实例

Application


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package shepeiqi;

/**
* Created by 15581 on 2017/11/8.
*/ // Application.java
public class Application{
public static void main(String args[]){
ThreeElectricOutlet outlet; //目标接口(三相插座)
Wash wash=new Wash(); //洗衣机
outlet=wash; //洗衣机插在三相插座上
System.out.println("使用三相插座接通电流:");
outlet.connectElectricCurrent(); //接通电流,开始洗衣服
TV tv=new TV(); //电视机
TreeElectricAdapter adapter=new TreeElectricAdapter(tv);//把电视插在适配器上
outlet=adapter; //适配器插在三相插座上
System.out.println("使用三相插座接通电流:");
outlet.connectElectricCurrent(); //接通电流,开始播放电视节目
}
}

ThreeElectricOutlet


1
2
3
4
5
6
package shepeiqi;

// ThreeElectricOutlet.java
public interface ThreeElectricOutlet{
public abstract void connectElectricCurrent();
}

TreeElectricAdapter


1
2
3
4
5
6
7
8
9
10
11
12
13
14
package shepeiqi;

/**
* Created by 15581 on 2017/11/8.
*/ // TreeElectricAdapter.java
public class TreeElectricAdapter implements ThreeElectricOutlet{
TwoElectricOutlet outlet;
TreeElectricAdapter(TwoElectricOutlet outlet){
this.outlet=outlet;
}
public void connectElectricCurrent(){
outlet.connectElectricCurrent();
}
}

TV


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package shepeiqi;

/**
* Created by 15581 on 2017/11/8.
*/
class TV implements TwoElectricOutlet{ //电视机使用两相插座
String name;
TV(){
name="长江电视机";
}
TV(String s){
name=s;
}
public void connectElectricCurrent(){
turnOn();
}
public void turnOn(){
System.out.println(name+"开始播放节目。");
}
}

TwoElectricOutlet


1
2
3
4
5
6
7
8
package shepeiqi;

/**
* Created by 15581 on 2017/11/8.
*/ // TwoElectricOutlet.java
public interface TwoElectricOutlet{
public abstract void connectElectricCurrent();
}

Wash>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package shepeiqi;

/**
* Created by 15581 on 2017/11/8.
*/
class Wash implements ThreeElectricOutlet{ //洗衣机使用三相插座
String name;
Wash(){
name="黄河洗衣机";
}
Wash(String s){
name=s;
}
public void connectElectricCurrent(){
turnOn();
}
public void turnOn(){
System.out.println(name+"开始洗衣物。");
}
}