適配器模式(Adapter模式)

適配器模式通過接口和繼承的方式來實現在適配類中調用目標類

  • 類適配器
    在這裏插入圖片描述
    在這裏插入圖片描述
public class ClassAdapterTest {
    public static void main(String[] args) {
        System.out.println("類適配器模式測試:");
        //面向接口編程
        Target target = new ClassAdapter();
        target.request();
    }
}
public interface Target {
    void request();
}
public class Adaptee {
    void specificRequest(){
        System.out.println("適配者中的業務代碼被調用");
    }
}
public class ClassAdapter extends Adaptee implements Target {
    @Override
    public void request(){
        super.specificRequest();
    }
}
  • 對象適配器
    在這裏插入圖片描述
public class ObjectAdapterTest {
    public static void main(String[] args) {
        System.out.println("對象適配器模式測試:");
        //面向接口編程
        Adaptee adaptee = new Adaptee();
        Target target = new ObjectAdapter(adaptee);
        target.request();
    }
}
public interface Target {
    void request();
}
public class Adaptee {
    void specificRequest(){
        System.out.println("適配者中的業務代碼被調用");
    }
}
public class ObjectAdapter implements Target {
    Adaptee adaptee;

    ObjectAdapter(Adaptee adaptee){
        this.adaptee=adaptee;
    }

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}
  • 默認適配器
public class DefaultAdapterTest {
    public static void main(String[] args) {
        /*
        默認適配器
         */
        DefaultAdapterSub1 sub1 = new DefaultAdapterSub1();
        DefaultAdapterSub2 sub2 = new DefaultAdapterSub2();

        sub1.operation1();
        System.out.println("----------");
        sub1.operation2();
        System.out.println("----------");
        sub2.operation1();
        System.out.println("----------");
        sub2.operation2();
    }
}
public interface Target {
   void operation1();
   void operation2();
}
public abstract class DefaultAdapter implements Target{
    @Override
    public void operation1() {

    }

    @Override
    public void operation2() {

    }
}
public class DefaultAdapterSub1 extends DefaultAdapter{
    @Override
    public void operation1() {
        System.out.println("重寫了operation1方法");
    }
}
public class DefaultAdapterSub2 extends DefaultAdapter{
    @Override
    public void operation2() {
        System.out.println("重寫了operation2方法");
    }
}
  • 雙向適配器
    在這裏插入圖片描述
public class ObjectAdapterTest {
    public static void main(String[] args) {
        System.out.println("目標通過雙向適配器訪問適配者:");
        //面向接口編程
        TwoWayAdaptee adaptee = new AdapteeRealize();
        TwoWayTarget target = new TwoWayAdapter(adaptee);
        target.request();
        System.out.println("-------------------");
        System.out.println("適配者通過雙向適配器訪問目標:");
        target = new TargetRealize();
        adaptee = new TwoWayAdapter(target);
        adaptee.specificRequest();
    }
}
public interface TwoWayTarget {
    void request();
}
public interface TwoWayAdaptee {
    void specificRequest();
}
public class TargetRealize implements TwoWayTarget {
    @Override
    public void request() {
        System.out.println("目標代碼被調用!");
    }
}
public class AdapteeRealize implements  TwoWayAdaptee {
    @Override
    public void specificRequest() {
        System.out.println("適配者代碼被調用!");
    }
}
public class TwoWayAdapter implements TwoWayTarget, TwoWayAdaptee {
    private TwoWayTarget target;
    private TwoWayAdaptee adaptee;

    public TwoWayAdapter(TwoWayTarget target) {
        this.target = target;
    }

    public TwoWayAdapter(TwoWayAdaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        adaptee.specificRequest();
    }

    @Override
    public void specificRequest() {
        target.request();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章