Javaオブジェクト向けの原理とSpring入門(Adapter Pattern)を理解する


1.アダプタモード


通常、コンバータのモードと呼ばれます.
例えば、充電器によっては、携帯電話の充電器が電源コンセントに直接接続できないため、充電器は携帯電話と電源コンセントの間で両者を接続するコンバータとして機能する.
すなわち,アダプタモードは,->SOLID(OCP)オープンクラックの原則と同じである.
アダプタモードを適用する前に
public class ServiceA {

    void runServiceA(){
        System.out.println("A");
    }
}
public class ServiceB {

    void runServiceB(){
        System.out.println("B");
    }
}
public class Main {


    public static void main(String[] args) {



        //어댑터 패턴 적용 X
        ServiceA nota=new ServiceA();
        ServiceB notb=new ServiceB();

        nota.runServiceA()
        notb.runServiceB();


    }
}
アダプタモードを適用する


public class AdapterA {
    ServiceA serviceA=new ServiceA();
    
    void run(){
        System.out.print("어댑터 패턴 적용 -> ");
        serviceA.runServiceA();
    }
}
public class AdapterB {
    ServiceB serviceB=new ServiceB();

    void run(){
        System.out.print("어댑터 패턴 적용 -> ");
        serviceB.runServiceB();
    }
}

public class Main {
    public static void main(String[] args) {


        //어댑터 패턴
        AdapterA a=new AdapterA();
        //어댑터 패턴 적용 X
        ServiceA nota=new ServiceA();

        AdapterB b=new AdapterB();
        ServiceB notb=new ServiceB();

        a.run();
        nota.runServiceA();

        b.run();
        notb.runServiceB();


    }
}

プレイヤー1とプレイヤー2のソースコードを実行します。


変換後の出力はAdapterクラスで表示できます.
public interface Action {

    /**
     *
     * 행동 인터페이스
     */
    void eat(String food);
    void attack(String weapon);
    void buy(String name);
}
public class player1  implements Action{


    @Override
    public void eat(String food) {
        System.out.println(food+"먹습니다.");
    }

    @Override
    public void attack(String weapon) {
        System.out.println(weapon+"공격!!");
    }

    @Override
    public void buy(String name) {
        System.out.println(name+"구입완료");
    }
}
public class Adapter implements Action{

    private Action action;

    public Adapter(Action action){
        this.action=action;
    }

    @Override
    public void eat(String food) {
        System.out.println("Using Adapter ---->");
        action.eat(food);
    }

    @Override
    public void attack(String weapon) {
        System.out.println("Using Adapter ---->");
        action.attack(weapon);
    }

    @Override
    public void buy(String name) {
        System.out.println("Using Adapter ---->");
        action.buy(name);
    }


}
public class player2 implements Action {


    @Override
    public void eat(String food) {
        System.out.println(food+"먹습니다.");
    }

    @Override
    public void attack(String weapon) {
        System.out.println(weapon+"공격!!.");
    }

    @Override
    public void buy(String name) {
        System.out.println(name+"구입합니다.");
    }
}
public class Main {


    public static void main(String[] args) {


        Adapter adapter1= new Adapter(new player1());

        adapter1.attack("화살");
        adapter1.eat("포션");

        Adapter adapter2 =new Adapter(new player2());
        adapter2.attack("칼");
        adapter2.eat("포션");
    }
}

おもちゃアイテムに適用してみる


既存のコードは、StationRepository、LineRepositoryからdeleteメソッドをロードすることで出力されます.
アダプタ・モードを適用すると、FormatAdapter、FormatAdapterLineクラスがそれぞれ作成され、StationRepostoryクラスとLineRepositoryクラスでdeleteメソッドが挿入および実行されます.

    private FormatAdapter formatAdapter=new FormatAdapter();
    private FormatAdapterLine formatAdapterLine=new FormatAdapterLine();

            else if(name.equals("2")){
                System.out.println("## 삭제할 역 이름을 입력하세요");
                name=sc.nextLine();
                formatAdapter.FormatDelete(name);
            }
            
    		else if(name.equals("2")){
                    System.out.println("## 삭제할 노선 이름을 입력하세요");
                    String linename=sc.nextLine();
                    formatAdapterLine.FormatDelete(linename);

                }
public class FormatAdapter{

    void FormatDelete(String name){
        StationRepository.deleteStation(name);
    }
}

public class FormatAdapterLine{

    
    public void FormatDelete(String name){
        LineRepository.deleteLineByName(name);
    }
}