Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/adapter_facade/AdapterPattern.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package adapter_facade;

import adapter_facade.adapter.Duck;
import adapter_facade.adapter.Turkey;
import adapter_facade.adapter.TurkeyAdapter;
import adapter_facade.adapter.impl.MallardDuck;
import adapter_facade.adapter.impl.WildTurkey;


/**
* Duck: 타겟 인터페이스
* Turkey: adaptee 인터페이스
*/
public class AdapterPattern {
public static void main(String[] args) {
Duck mallardDuck = new MallardDuck();
testDuck(mallardDuck);

Turkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
testDuck(turkeyAdapter);
}

/**
* 클라이언트는 중간에 어댑터가 있는 사실을 모름
*/
private static void testDuck(Duck duck) {
duck.quack();
duck.fly();
}
}
23 changes: 23 additions & 0 deletions src/adapter_facade/FacadePattern.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package adapter_facade;

import adapter_facade.facade.HomeTheaterFacade;
import adapter_facade.facade.clazz.*;

public class FacadePattern {
public static void main(String[] args) {
Amplifier amp = new Amplifier("Amplifier");
Tuner tuner = new Tuner("AM/FM Tuner", amp);
StreamingPlayer player = new StreamingPlayer("Streaming Player", amp);
Projector projector = new Projector("Projector", player);
TheaterLights lights = new TheaterLights("Theater Ceiling Lights");
Screen screen = new Screen("Theater Screen");
PopcornPopper popper = new PopcornPopper("Popcorn Popper");

HomeTheaterFacade homeTheater =
new HomeTheaterFacade(amp, tuner, player,
projector, screen, lights, popper);

homeTheater.watchMovie("Raiders of the Lost Ark");
homeTheater.endMovie();
}
}
7 changes: 7 additions & 0 deletions src/adapter_facade/adapter/Duck.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package adapter_facade.adapter;

public interface Duck {
void quack();

void fly();
}
7 changes: 7 additions & 0 deletions src/adapter_facade/adapter/Turkey.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package adapter_facade.adapter;

public interface Turkey {
void gobble();

void fly();
}
34 changes: 34 additions & 0 deletions src/adapter_facade/adapter/TurkeyAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package adapter_facade.adapter;

/**
* Duck 객체 대신 Turkey 객체를 사용하기 위해 적용할 어댑터
* <p>
* - Turkey : adaptee 인스턴스
* - Duck : 타겟 인터페이스
*/
public class TurkeyAdapter implements Duck {

private final Turkey turkey; // adaptee 인스턴스

public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}


/**
* quack, fly : target request
*/
@Override
public void quack() {
// translated request
turkey.gobble();
}

@Override
public void fly() {
// translated request
for (int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
15 changes: 15 additions & 0 deletions src/adapter_facade/adapter/impl/MallardDuck.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package adapter_facade.adapter.impl;

import adapter_facade.adapter.Duck;

public class MallardDuck implements Duck {
@Override
public void quack() {
System.out.println("꽥");
}

@Override
public void fly() {
System.out.println("날고 있음");
}
}
15 changes: 15 additions & 0 deletions src/adapter_facade/adapter/impl/WildTurkey.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package adapter_facade.adapter.impl;

import adapter_facade.adapter.Turkey;

public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("골골");
}

@Override
public void fly() {
System.out.println("짧게 날고 있음");
}
}
78 changes: 78 additions & 0 deletions src/adapter_facade/facade/HomeTheaterFacade.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package adapter_facade.facade;

import adapter_facade.facade.clazz.*;

/**
* 퍼사드 패턴은 여러 서브시스템의 구성요소들을 합쳐서 통합 인터페이스(watchMovie, endMovie)를 만든다
*/
public class HomeTheaterFacade {

// 서브 시스템의 구성 요소들
Amplifier amp;
Tuner tuner;
StreamingPlayer player;
Projector projector;
TheaterLights lights;
Screen screen;
PopcornPopper popper;

public HomeTheaterFacade(Amplifier amp,
Tuner tuner,
StreamingPlayer player,
Projector projector,
Screen screen,
TheaterLights lights,
PopcornPopper popper) {

this.amp = amp;
this.tuner = tuner;
this.player = player;
this.projector = projector;
this.screen = screen;
this.lights = lights;
this.popper = popper;
}

public void watchMovie(String movie) {
System.out.println("Get ready to watch a movie...");
popper.on();
popper.pop();
lights.dim(10);
screen.down();
projector.on();
projector.wideScreenMode();
amp.on();
amp.setStreamingPlayer(player);
amp.setSurroundSound();
amp.setVolume(5);
player.on();
player.play(movie);
}


public void endMovie() {
System.out.println("Shutting movie theater down...");
popper.off();
lights.on();
screen.up();
projector.off();
amp.off();
player.stop();
player.off();
}

public void listenToRadio(double frequency) {
System.out.println("Tuning in the airwaves...");
tuner.on();
tuner.setFrequency(frequency);
amp.on();
amp.setVolume(5);
amp.setTuner(tuner);
}

public void endRadio() {
System.out.println("Shutting down the tuner...");
tuner.off();
amp.off();
}
}
45 changes: 45 additions & 0 deletions src/adapter_facade/facade/clazz/Amplifier.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package adapter_facade.facade.clazz;

public class Amplifier {
String description;
Tuner tuner;
StreamingPlayer player;

public Amplifier(String description) {
this.description = description;
}

public void on() {
System.out.println(description + " on");
}

public void off() {
System.out.println(description + " off");
}

public void setStereoSound() {
System.out.println(description + " stereo mode on");
}

public void setSurroundSound() {
System.out.println(description + " surround sound on (5 speakers, 1 subwoofer)");
}

public void setVolume(int level) {
System.out.println(description + " setting volume to " + level);
}

public void setTuner(Tuner tuner) {
System.out.println(description + " setting tuner to " + tuner);
this.tuner = tuner;
}

public void setStreamingPlayer(StreamingPlayer player) {
System.out.println(description + " setting Streaming player to " + player);
this.player = player;
}

public String toString() {
return description;
}
}
26 changes: 26 additions & 0 deletions src/adapter_facade/facade/clazz/PopcornPopper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package adapter_facade.facade.clazz;

public class PopcornPopper {
String description;

public PopcornPopper(String description) {
this.description = description;
}

public void on() {
System.out.println(description + " on");
}

public void off() {
System.out.println(description + " off");
}

public void pop() {
System.out.println(description + " popping popcorn!");
}


public String toString() {
return description;
}
}
31 changes: 31 additions & 0 deletions src/adapter_facade/facade/clazz/Projector.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package adapter_facade.facade.clazz;

public class Projector {
String description;
StreamingPlayer player;

public Projector(String description, StreamingPlayer player) {
this.description = description;
this.player = player;
}

public void on() {
System.out.println(description + " on");
}

public void off() {
System.out.println(description + " off");
}

public void wideScreenMode() {
System.out.println(description + " in widescreen mode (16x9 aspect ratio)");
}

public void tvMode() {
System.out.println(description + " in tv mode (4x3 aspect ratio)");
}

public String toString() {
return description;
}
}
22 changes: 22 additions & 0 deletions src/adapter_facade/facade/clazz/Screen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package adapter_facade.facade.clazz;

public class Screen {
String description;

public Screen(String description) {
this.description = description;
}

public void up() {
System.out.println(description + " going up");
}

public void down() {
System.out.println(description + " going down");
}


public String toString() {
return description;
}
}
Loading