适配器模式
就是改变源接口,以便于兼容目标接口;如果不准备实现一个接口的所有方法时,就可以使用“缺省适配器模式”制造一个抽象类,给出所有方法的平庸的具体实现,这样,从这个抽象类再继承下去的子类就不必实现所有的方法了。
适配器模式实现方式
类的适配器模式和对象的适配器模式;
类的适配器模式:
目标接口类:
package adapter; public interface Target { void serviceOperation1(); void serviceOperation2(); void serviceOperation3(); }
需要适配接口的类:
package adapter; public class Adaptee { /** * 不想实现这个serviceOperation1多余的方法,需要把它适配掉 */ public void serviceOperation1(){} }
业务实现类:
package adapter; /** * 只需要实现 serviceOperation2、serviceOperation3 * 避免实现多余的方法 */ public class Adapter extends Adaptee implements Target { @Override public void serviceOperation2() { } @Override public void serviceOperation3() { } }
对象的适配器模式:
Tatget接口类:
package adapter; public interface Target { void serviceOperation1(); void serviceOperation2(); void serviceOperation3(); }
需要适配接口方法的类:
package adapter; public class Adaptee { /** * 不想实现这个serviceOperation1多余的方法,需要把它适配掉 */ public void serviceOperation1(){} }
业务操作类:
package adapter; /** * 只需要实现 serviceOperation2、serviceOperation3 * 避免实现多余的方法 */ public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void serviceOperation1() { this.adaptee.serviceOperation1(); } @Override public void serviceOperation2() { } @Override public void serviceOperation3() { } }
抽象类实现适配器:
package adapter; public interface AbstractService { void serviceOperation1(); void serviceOperation2(); void serviceOperation3(); }
抽象类实现接口(适配器类):
package adapter; public abstract class AbstractAdapter implements AbstractService{ @Override public void serviceOperation1() { } @Override public void serviceOperation2() { } @Override public void serviceOperation3() { } }
业务实现类:
package adapter; public class AbstractServiceImpl extends AbstractAdapter { @Override public void serviceOperation1() { } }
package adapter;
/**
* 只需要实现 serviceOperation2、serviceOperation3
* 避免实现多余的方法
*/
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void serviceOperation1() {
this.adaptee.serviceOperation1();
}
@Override
public void serviceOperation2() {
}
@Override
public void serviceOperation3() {
}
}