client客户端target的子实现NormalTarget表示老系统
有prepare() , execute()两个方法
public class Client {
Target target;
public void setTarget(Target target) {
this.target = target;
}
public void work(){
target.prepare();
target.execute();
}
}
public interface Target {
void prepare();
void execute();
}
public class NormalTarget implements Target {
@Override
public void prepare() {
System.out.println("normal target prepare()");
}
@Override
public void execute() {
System.out.println("normal target prepare()");
}
}
现在来一一个新系统(待适配的类Adaptee)
里面有四个方法
prepare1()
prepare2()
prepare3()
doSomething()
public class Adaptee {
public void prepare1(){
System.out.println("Adaptee prepare1()");
}
public void prepare2(){
System.out.println("Adaptee prepare2()");
}
public void prepare3(){
System.out.println("Adaptee prepare3()");
}
public void doSomething(){
System.out.println("Adaptee doingSomething()");
}
}
现在要求让新系统和和客户端进行适配
可以写一个适配器类Adapter 实现Target接口,重写prepare()和execute()方法,里面组合待适配的类Adaptee
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void prepare(){
adaptee.prepare1();
adaptee.prepare2();
adaptee.prepare3();
}
public void execute(){
adaptee.doSomething();
}
}
测试
public class AdapterTest {
public static void main(String[] args) {
Client client = new Client();
System.out.println("--------------normal--------------");
client.setTarget(new NormalTarget());
client.work();
System.out.println("--------------adaptee--------------");
client.setTarget(new Adapter(new Adaptee()));
client.work();
}
}
输出:
--------------normal--------------
normal target prepare()
normal target execute()
--------------adaptee--------------
Adaptee prepare1()
Adaptee prepare2()
Adaptee prepare3()
Adaptee doingSomething()