실제 우리 일상생활에서 쓰이는 어댑터와 유사하다. ex) 100v -> 220v

호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용함

SOLID중에서 개방패쇄 원칙을 따른다.

 

package com.company.gof.adapter;

public interface Electronic110V {
    public void powerON();
}

 

package com.company.gof.adapter;

public interface Electronic220V {
    public void connect();
}

 

package com.company.gof.adapter;

public class Hairdryer implements Electronic110V{
    @Override
    public void powerON() {
        System.out.println("Hair Dryer Power On By 110V");
    }
}

 

 

package com.company.gof.adapter;

public class Cleaner implements Electronic220V{
    @Override
    public void connect() {
        System.out.println("Cleaner On by 220V");
    }
}

 

package com.company.gof.adapter;

public class AirConditioner implements Electronic220V {

    @Override
    public void connect() {
        System.out.println("AirConditioner ON by 220V");
    }
}

 

 

package com.company.gof.adapter;

public class SocketAdapter implements Electronic110V{

    // 변환 대상
    private Electronic220V electronic220V;

    public SocketAdapter(Electronic220V electronic220V){
        this.electronic220V = electronic220V;
    }

    @Override
    public void powerON() {
        electronic220V.connect();
    }
}

 

 

package com.company.gof;

import com.company.gof.adapter.*;

public class Main {

    public static void main(String[] args) {
        Hairdryer hairdryer = new Hairdryer();
        connect(hairdryer);

        Cleaner cleaner = new Cleaner();
//        사용불가 콘센트가 맞지 않아서
//        connect(cleaner);

        Electronic110V adapter = new SocketAdapter(cleaner);
        connect(adapter);

        AirConditioner airConditioner = new AirConditioner();
        Electronic110V airAdapter = new SocketAdapter(airConditioner);
        connect(airAdapter);


    }

    // 콘센트
    public static void connect(Electronic110V electronic110V){
        electronic110V.powerON();
    }
}

-결과 화면

'Spring' 카테고리의 다른 글

Decorator pattern(데코레이터 패턴)  (0) 2021.04.18
Proxy pattern(프록시 패턴)  (0) 2021.04.16
Singleton pattern(싱글톤 패턴)  (0) 2021.04.15
디자인 패턴  (0) 2021.04.15
POJO 클래스  (0) 2021.04.15

+ Recent posts