设计模式-适配器模式
提起适配器模式。。网上的教程总是会举一个插头和插座的例子。。这个例子其实还不错,但是应用到代码中还是会让人有些迷糊。所以我准备再自己实现一遍。。
一般来讲,适配器模式有两种实现方式:
- 继承
- 组合
1.继承
首先我有一个三孔的插线板
interface plugBoard_3{
public void charge_3(); //充电
}
如果我要普通地用三孔的插头插插线板,我只需要普通地实现接口 //好多插。。
class chargeBy3 implements plugBoard_3{
public void charge_3() {
System.out.println("用三孔的插头充电");
}
}
但是现在如果我只有一个两孔的插头呢。。
class chargeBy2 {
public void charge_2() {
System.out.println("用两孔的插头充电");
}
}
那么我就需要一个适配器(转换口)
class Adapter extends chargeBy2 implements plugBoard_3{
public void charge_3() {
super.charge_2(); //现在我就是用适配器充电了。。因为相当于适配器已经盖在了两孔的插座上了
}
}
真的要插了!
public static void main(String[] args) {
// 用两孔的插头插三孔的插座
plugBoard_3 adapter = new Adapter();
adapter.charge_3(); //表面是charge_3,实际是charge_2
}
}
现在看起来其实就是一个plugBoard_3的对象调用了一个charge_2的方法——通过继承plugBoard的实现类来实现。。。
2. 组合
其他的都和上面的一样,关键是适配器的实现方法:
class Adapter implements plugBoard_3{
private chargeBy2 chargeby2;
// 可以通过构造函数传入具体需要适配的被适配类对象
public Adapter (chargeBy2 chargeby2) {
this.chargeby2= chargeby2;
}
public void charge_3() { //实现接口中的方法
this.chargeby2.charge_2();
}
}
真的要插了!
public static void main(String[] args) {
// 用两孔的插头插三孔的插座
plugBoard_3 adapter = new Adapter(new chargeBy2());
adapter.charge_3();
}
}
这回不继承了,我直接把一个两头的插头放到适配器里面去,到时候就直接用两头的插,插线板也只能被“骗了”。。。