Skip to content
Open
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
1 change: 1 addition & 0 deletions design_pattern/.idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions design_pattern/src/main/java/honggi/Clipboard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package honggi;

public class Clipboard {
private String text = "";

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}
}
18 changes: 18 additions & 0 deletions design_pattern/src/main/java/honggi/CopySubscriber.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package honggi;

public class CopySubscriber implements KeyboardSubscriber {

private final Clipboard clipboard;

public CopySubscriber(Clipboard clipboard) {
this.clipboard = clipboard;
}

@Override
public void onKeyClick(String keyCode, boolean isCtrlDown, String selected) {
if (isCtrlDown && keyCode.equals("c")) {
clipboard.setText(selected);
System.out.println("클립보드에 내용이 복사되었습니다.");
}
}
}
25 changes: 25 additions & 0 deletions design_pattern/src/main/java/honggi/KeyboardPublisher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package honggi;

import java.util.ArrayList;

/**
* 키보드 입력을 관리합니다.
*/
public class KeyboardPublisher {

private ArrayList<KeyboardSubscriber> subscribers = new ArrayList<>();
public void addSubscriber(KeyboardSubscriber subscriber) {
// 구독되어 있지 않다면 구독 추가
if (!subscribers.contains(subscriber)) subscribers.add(subscriber);
}
public void removeSubscriber(KeyboardSubscriber subscriber) {
subscribers.remove(subscriber);
}

// 클릭 발생
public void click(String keyCode, boolean isCtrlDown, String selected) {
for (KeyboardSubscriber subscriber : subscribers) {
subscriber.onKeyClick(keyCode, isCtrlDown, selected);
}
}
}
5 changes: 5 additions & 0 deletions design_pattern/src/main/java/honggi/KeyboardSubscriber.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package honggi;

public interface KeyboardSubscriber {
void onKeyClick(String keyCode, boolean isCtrlDown, String selected);
}
21 changes: 21 additions & 0 deletions design_pattern/src/main/java/honggi/MuteSubscriber.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package honggi;

/**
* 동영상을 음소거하거나 음소거를 해제합니다.
*/
public class MuteSubscriber implements KeyboardSubscriber {

private boolean isMuted = false;

@Override
public void onKeyClick(String keyCode, boolean isCtrlDown, String selected) {
if (!isCtrlDown && keyCode.equals("m")) {
if (isMuted)
System.out.println("동영상 음소거가 해제되었습니다.");
else
System.out.println("동영상이 음소거되었습니다.");

isMuted = !isMuted;
}
}
}
17 changes: 17 additions & 0 deletions design_pattern/src/main/java/honggi/PasteSubscriber.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package honggi;

public class PasteSubscriber implements KeyboardSubscriber {

private final Clipboard clipboard;

public PasteSubscriber(Clipboard clipboard) {
this.clipboard = clipboard;
}

@Override
public void onKeyClick(String keyCode, boolean isCtrlDown, String selected) {
if (isCtrlDown && keyCode.equals("v")) {
System.out.println("클립보드 내용(" + clipboard.getText() + ")을 붙여넣었습니다.");
}
}
}