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);
}
}