设计模式重点还是思想,针对问题的具体代码肯定会有变化.
现有,Usb插孔和Ps2插头一个.
1.类适配器
Usb.java
interface Usb{
void chargeWithUsb();
}
Ps2.java
interface Ps2{
void chargeWithPs2();
}
Phone.java
public class Phone implements Usb{
@Override
public void chargeWithUsb(){
System.out.println(" charging (usb) ");
}
}
Adapter.java
public class Adapter extends Phone implements Ps2{
//继承是为了调用 Phone 的方法,Cuz java不允许方法的嵌套.
@Override
public void chargeWithPs2(){
chargeWithUsb();
}
//调用chargeWithPs2(),但是实际执行的是chargeWithUsb()
}
Test.java
public class Test{
public static void main( String[] args){
Ps2 gamer = new Adapter();
gamer.chargeWithPs2();
}
//输出 charging (usb)
}
.
2.对象适配器
Usb.java
interface Usb{
void chargeWithUsb():
}
Ps2.java
interface Ps2{
void chargeWithPs2();
}
Phone.java
public class Phone implements Usb{
@Override
public void chargeWithUsb(){
System.out.println("charging (usb)");
}
}
...................上面代码与类适配器相同
Adapter.java
public class Adapter implements Ps2{
private Usb usb;
public Adapter(Usb usb){
this.usb = usb
}//初始化类成员变量usb
@Override
public void chargeWithPs2(){
usb.chargeWithUsb();
}
}
//通过获得Usb实例来调用其方法.
Test.java
public class Test{
public static void main( String[] args ){
Ps2 gamer = new Adapter( new Usb() );
gamer.chargeWithPs2();
}
}
.
.
3.接口适配器
A.java
interface A{
void a();
void b();
void c();
void d();
void e();
Adapter.java
public abstract class Adapter implements A {
//必须实现所有接口方法,必须有方法体{},不一定要内容
public void a(){};
public void b(){};
public void c(){};
public void d(){};
public void e(){};
//设置为抽象类,可以避免被实例化.抽象类只为继承.
Example.java
public class Example extends Adapter{
@Override
public void a(){
System.out.println("excute a");
}
@Override
public void c()
System.out.println("excute c");
}
//有选择的实现接口方法,而不是全部实现.