java设计模式之适配器模式

适配器模式

  就是改变源接口,以便于兼容目标接口;如果不准备实现一个接口的所有方法时,就可以使用“缺省适配器模式”制造一个抽象类,给出所有方法的平庸的具体实现,这样,从这个抽象类再继承下去的子类就不必实现所有的方法了。

适配器模式实现方式

  类的适配器模式和对象的适配器模式;

类的适配器模式:

目标接口类:

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() {

}
}