Merge branch 'master' of https://github.com/haerong22/Study
This commit is contained in:
18
design-pattern/gof/src/memento/after/Client.java
Normal file
18
design-pattern/gof/src/memento/after/Client.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package memento.after;
|
||||
|
||||
public class Client {
|
||||
|
||||
public static void main(String[] args) {
|
||||
Game game = new Game();
|
||||
game.setBlueTeamScore(10);
|
||||
game.setRedTeamScore(20);
|
||||
|
||||
GameSave save = game.save();
|
||||
game.setBlueTeamScore(12);
|
||||
game.setRedTeamScore(22);
|
||||
game.restore(save);
|
||||
|
||||
System.out.println(game.getBlueTeamScore());
|
||||
System.out.println(game.getRedTeamScore());
|
||||
}
|
||||
}
|
||||
35
design-pattern/gof/src/memento/after/Game.java
Normal file
35
design-pattern/gof/src/memento/after/Game.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package memento.after;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Game implements Serializable {
|
||||
|
||||
private int redTeamScore;
|
||||
|
||||
private int blueTeamScore;
|
||||
|
||||
public int getRedTeamScore() {
|
||||
return redTeamScore;
|
||||
}
|
||||
|
||||
public void setRedTeamScore(int redTeamScore) {
|
||||
this.redTeamScore = redTeamScore;
|
||||
}
|
||||
|
||||
public int getBlueTeamScore() {
|
||||
return blueTeamScore;
|
||||
}
|
||||
|
||||
public void setBlueTeamScore(int blueTeamScore) {
|
||||
this.blueTeamScore = blueTeamScore;
|
||||
}
|
||||
|
||||
public GameSave save() {
|
||||
return new GameSave(this.blueTeamScore, this.redTeamScore);
|
||||
}
|
||||
|
||||
public void restore(GameSave gameSave) {
|
||||
this.blueTeamScore = gameSave.getBlueTeamScore();
|
||||
this.redTeamScore = gameSave.getRedTeamScore();
|
||||
}
|
||||
}
|
||||
21
design-pattern/gof/src/memento/after/GameSave.java
Normal file
21
design-pattern/gof/src/memento/after/GameSave.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package memento.after;
|
||||
|
||||
public class GameSave {
|
||||
|
||||
private final int blueTeamScore;
|
||||
|
||||
private final int redTeamScore;
|
||||
|
||||
public GameSave(int blueTeamScore, int redTeamScore) {
|
||||
this.blueTeamScore = blueTeamScore;
|
||||
this.redTeamScore = redTeamScore;
|
||||
}
|
||||
|
||||
public int getBlueTeamScore() {
|
||||
return blueTeamScore;
|
||||
}
|
||||
|
||||
public int getRedTeamScore() {
|
||||
return redTeamScore;
|
||||
}
|
||||
}
|
||||
17
design-pattern/gof/src/memento/before/Client.java
Normal file
17
design-pattern/gof/src/memento/before/Client.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package memento.before;
|
||||
|
||||
public class Client {
|
||||
|
||||
public static void main(String[] args) {
|
||||
Game game = new Game();
|
||||
game.setRedTeamScore(10);
|
||||
game.setBlueTeamScore(20);
|
||||
|
||||
int blueTeamScore = game.getBlueTeamScore();
|
||||
int redTeamScore = game.getRedTeamScore();
|
||||
|
||||
Game restoredGame = new Game();
|
||||
restoredGame.setBlueTeamScore(blueTeamScore);
|
||||
restoredGame.setRedTeamScore(redTeamScore);
|
||||
}
|
||||
}
|
||||
26
design-pattern/gof/src/memento/before/Game.java
Normal file
26
design-pattern/gof/src/memento/before/Game.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package memento.before;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Game implements Serializable {
|
||||
|
||||
private int redTeamScore;
|
||||
|
||||
private int blueTeamScore;
|
||||
|
||||
public int getRedTeamScore() {
|
||||
return redTeamScore;
|
||||
}
|
||||
|
||||
public void setRedTeamScore(int redTeamScore) {
|
||||
this.redTeamScore = redTeamScore;
|
||||
}
|
||||
|
||||
public int getBlueTeamScore() {
|
||||
return blueTeamScore;
|
||||
}
|
||||
|
||||
public void setBlueTeamScore(int blueTeamScore) {
|
||||
this.blueTeamScore = blueTeamScore;
|
||||
}
|
||||
}
|
||||
35
design-pattern/gof/src/observer/after/ChatServer.java
Normal file
35
design-pattern/gof/src/observer/after/ChatServer.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package observer.after;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ChatServer {
|
||||
|
||||
private Map<String, List<Subscriber>> subscribers = new HashMap<>();
|
||||
|
||||
public void register(String subject, Subscriber subscriber) {
|
||||
if (this.subscribers.containsKey(subject)) {
|
||||
this.subscribers.get(subject).add(subscriber);
|
||||
} else {
|
||||
List<Subscriber> list = new ArrayList<>();
|
||||
list.add(subscriber);
|
||||
this.subscribers.put(subject, list);
|
||||
}
|
||||
}
|
||||
|
||||
public void unregister(String subject, Subscriber subscriber) {
|
||||
if (this.subscribers.containsKey(subject)) {
|
||||
this.subscribers.get(subject).remove(subscriber);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendMessage(User user, String subject, String message) {
|
||||
if (this.subscribers.containsKey(subject)) {
|
||||
String userMessage = user.getName() + ": " + message;
|
||||
this.subscribers.get(subject).forEach(s -> s.handleMessage(userMessage));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
18
design-pattern/gof/src/observer/after/Client.java
Normal file
18
design-pattern/gof/src/observer/after/Client.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package observer.after;
|
||||
|
||||
public class Client {
|
||||
|
||||
public static void main(String[] args) {
|
||||
ChatServer chatServer = new ChatServer();
|
||||
User user1 = new User("kim");
|
||||
User user2 = new User("lee");
|
||||
|
||||
chatServer.register("오징어게임", user1);
|
||||
chatServer.register("오징어게임", user2);
|
||||
|
||||
chatServer.register("디자인패턴", user1);
|
||||
|
||||
chatServer.sendMessage(user1, "오징어게임", "아.. 이름이 기억났어.. 일남이야.. 오일남");
|
||||
chatServer.sendMessage(user2, "디자인패턴", "옵저버 패턴으로 만든 채팅");
|
||||
}
|
||||
}
|
||||
6
design-pattern/gof/src/observer/after/Subscriber.java
Normal file
6
design-pattern/gof/src/observer/after/Subscriber.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package observer.after;
|
||||
|
||||
public interface Subscriber {
|
||||
|
||||
void handleMessage(String message);
|
||||
}
|
||||
19
design-pattern/gof/src/observer/after/User.java
Normal file
19
design-pattern/gof/src/observer/after/User.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package observer.after;
|
||||
|
||||
public class User implements Subscriber {
|
||||
|
||||
private String name;
|
||||
|
||||
public User(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(String message) {
|
||||
System.out.println(message);
|
||||
}
|
||||
}
|
||||
30
design-pattern/gof/src/observer/before/ChatServer.java
Normal file
30
design-pattern/gof/src/observer/before/ChatServer.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package observer.before;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ChatServer {
|
||||
|
||||
private Map<String, List<String>> messages;
|
||||
|
||||
public ChatServer() {
|
||||
this.messages = new HashMap<>();
|
||||
}
|
||||
|
||||
|
||||
public void add(String subject, String message) {
|
||||
if (messages.containsKey(subject)) {
|
||||
messages.get(subject).add(message);
|
||||
} else {
|
||||
List<String> messageList = new ArrayList<>();
|
||||
messageList.add(message);
|
||||
messages.put(subject, messageList);
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> getMessage(String subject) {
|
||||
return messages.get(subject);
|
||||
}
|
||||
}
|
||||
18
design-pattern/gof/src/observer/before/Client.java
Normal file
18
design-pattern/gof/src/observer/before/Client.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package observer.before;
|
||||
|
||||
public class Client {
|
||||
|
||||
public static void main(String[] args) {
|
||||
ChatServer chatServer = new ChatServer();
|
||||
|
||||
User user1 = new User(chatServer);
|
||||
user1.sendMessage("디자인패턴", "이번엔 옵저버 패턴입니다.");
|
||||
user1.sendMessage("롤드컵2021", "LCK 화이팅!");
|
||||
|
||||
User user2 = new User(chatServer);
|
||||
System.out.println(user2.getMessage("디자인패턴"));
|
||||
|
||||
user1.sendMessage("디자인패턴", "예제 코드 보는 중..");
|
||||
System.out.println(user2.getMessage("디자인패턴"));
|
||||
}
|
||||
}
|
||||
21
design-pattern/gof/src/observer/before/User.java
Normal file
21
design-pattern/gof/src/observer/before/User.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package observer.before;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class User {
|
||||
|
||||
private ChatServer chatServer;
|
||||
|
||||
public User(ChatServer chatServer) {
|
||||
this.chatServer = chatServer;
|
||||
}
|
||||
|
||||
|
||||
public void sendMessage(String subject, String message) {
|
||||
chatServer.add(subject, message);
|
||||
}
|
||||
|
||||
public List<String> getMessage(String subject) {
|
||||
return chatServer.getMessage(subject);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user