Adapter Pattern - dnwls16071/Backend_Summary GitHub Wiki

πŸ“š Adapter Pattern μ„€λͺ…

  • κΈ°μ‘΄ μ œν’ˆμ„ κ°œμ‘°ν•˜μ§€ μ•Šκ³  λ‹€λ₯Έ κ·œκ²©μ— 맞게 μ‚¬μš©ν•  수 있게 λ§Œλ“œλŠ” νŒ¨ν„΄

[Ex1]

// Target interface(졜근 λ©”μ‹œμ§€ 전솑 방식)
interface ModernMessageSender {
    void sendMessage(String message, String recipient);
}

// Adapter interface(μ˜›λ‚  λ©”μ‹œμ§€ 전솑 방식)
interface OldMessageSender {
    int send(String[] messageData);
}
// Concrete Adaptee
class OldMessageSystem implements OldMessageSender {

    // 전솑에 μ„±κ³΅ν•˜λ©΄ 1을 λ°˜ν™˜ν•˜λŠ” μ˜›λ‚  λ©”μ‹œμ§€ 전솑 방식
    @Override
    public int send(String[] messageData) {
        System.out.println("OldMessageSystem: Sending message: " + messageData[0] + " to " + messageData[1]);
        return 1; // Success code
    }
}
// Adapter(μ΅œμ‹  λ©”μ‹œμ§€ 전솑 방식을 μ˜›λ‚  μ‹œμŠ€ν…œμ— μ μš©ν•˜κ³  μ‹Άλ‹€)
// μ›ν•˜λŠ” 적용 λŒ€μƒμ„ ν•„λ“œλ‘œ κ°€μ§„λ‹€.
class MessageAdapter implements ModernMessageSender {
    private OldMessageSender oldSystem;

    public MessageAdapter(OldMessageSender oldSystem) {
        this.oldSystem = oldSystem;
    }

    @Override
    public void sendMessage(String message, String recipient) {
        String[] messageData = {message, recipient};
        int result = oldSystem.send(messageData);

        // result 값이 1이 μ•„λ‹ˆλΌλ©΄(=전솑 λΆˆκ°€)
        if (result != 1) {
            System.out.println("Failed to send message");
        }
    }
}

[Ex2]

interface DisplayAdapter {
    void display();
}
// Adaptees
class USB {
    void connectWithUsbCable(String data) {
        System.out.println("Displaying via USB with data: " + data);
    }
}

class HDMI {
    void connectWithHdmiCable(int resolution) {
        System.out.println(
        "Displaying via HDMI with resolution: " + resolution + "p"
        );
    }
}

class VGA {
    void connectWithVgaCable(boolean highQuality) {
        System.out.println(
        "Displaying via VGA with high quality: " + highQuality
        );
    }
}
class USBAdapter implements DisplayAdapter {
    private USB usb;
    private String data;
    public USBAdapter(USB usb, String data) {
        this.usb = usb;
        this.data = data;
    }

    @Override
    public void display() {
        usb.connectWithUsbCable(data);
    }
}

class HDMIAdapter implements DisplayAdapter {
    private HDMI hdmi;
    private int resolution;
    public HDMIAdapter(HDMI hdmi, int resolution) {
        this.hdmi = hdmi;
        this.resolution = resolution;
    }

    @Override
    public void display() {
        hdmi.connectWithHdmiCable(resolution);
    }
}

class VGAAdapter implements DisplayAdapter {
    private VGA vga;
    private boolean highQuality;
    public VGAAdapter(VGA vga, boolean highQuality) {
        this.vga = vga;
        this.highQuality = highQuality;
    }

    @Override
    public void display() {
        vga.connectWithVgaCable(highQuality);
    }
}