1. 메멘토 패턴 캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법 객체 상태를 외부에 저장했다가 해당 상태로 다시 복구할 수 있다. Originator : 원래의 내부정보를 가지고있는 데이터 객체 createMementor() : 내부정보를 Memento클래스로 추상화하여 전달하는 Operation restore() : 외부에서 전달받은 Memento 정보를 복원할 수 있는 기능을 제공하는 Operation CareTaker : Originator 정보를 가지고와 복원 Originator 정보를 추상화해둔 Memento타입으로 가지고 있음 Memento : 원래의 내부정보를 추상화하여 보관하고 있는 객체 Memento() : 내부정보가 세팅되면 변경 불가하게끔 설정 2. 메멘토 패턴 적용 2...
1. 중재자 패턴 여러 객체들이 소통하는 방법을 캡슐화하는 패턴 여러 컴포넌트간의 결합도를 중재자를 통해 낮출 수 있다. 2. 중재자 패턴 적용 2.1. 적용 전 코드 public class CleaningService { public void clean(Gym gym) { System.out.println("clean " + gym); } public void getTowel(Guest guest, int numberOfTowel) { System.out.println(numberOfTowel + " towels to " + guest); } public void clean(Restaurant restaurant) { System.out.println("clean " + restaurant); } } ..
1. 이터레이터 패턴? 집합 객체의 내부 구조를 노출시키지 않고 순회하는 방법을 제공하는 패턴. 2. 이터레이터 패턴 적용 2.1. 적용 전 코드 클라이언트가 Board클래스 내부의 Post에 대해 너무 많은 것을 알고있음. 내부 Post의 타입이 변경될시 클라이언트 코드도 같이 변경되어야 함. public class IteratorClient { public static void main(String[] args) { Board board = new Board(); board.addPost("디자인 패턴 게임"); board.addPost("선생님, 저랑 디자인 패턴..."); board.addPost("지금 이자리에 계신 여러분들은 모두..."); //TODO 들어간 순서대로 순회하기 List pos..
1. 의미 인터프리터(interpreter) 사전적 의미 → 통역, 연주자 자주 등장하는 문제를 간단한 언어로 정의하여 재사용하는 패턴 반복되는 문제 패턴을 언어 또는 문법으로 정의하고 확장 패턴이나 언어, 문법등으로 정의하여 이슈 발생시 대입하여 사용 정규식을 일종의 인터프리터로 본다. context 글로벌 변수, 모든 expression에서 사용되는 정보 expression interpret(context), context에 있는 값을 참조 1. terminal expression 자체 종료 2. non terminal expression 다른 expression을 참조해 봐야 결과를 확인, 다른 expression을 참조(재귀) terminal 을 참조할 수 있고 다른 non terminal exp..
1. 커맨드 패턴 요청을 캡슐화 하여 호출자(invoker)와 수신자(receiver)를 분리하는 패턴 요청을 처리하는 방법이 바뀌더라도, 호출자의 코드는 변경되지 않는다. Invoker : 호출자 Command 수신자가 어떤 클래스이고, 수신자가 어떤 명령을 호출해야하는지 명시 명령을 수행하기 위한 모든 작업들을 캡슐화, 재사용 용이 여러 구체적인 커맨드들을 구체화 Receiver : 수신자 ConcreteCommand : 구현체, 어떠한 수신자를 사용할지, 수신자의 명령 및 파라미터들을 명시 2. 커맨드 패턴 적용 전 호출자쪽에 비슷한 코드가 중복되는 문제 > 호출자와 수신자간의 관계가 타이트하여 발생 호출자쪽에서 다른 명령을 실행하고 싶다면, 코드를 또 변경해야하는 상황이 발생 public clas..
1. 책임연쇄패턴 요청을 보내는 쪽(sender)과 요청을 처리하는 쪽(receiver)를 분리하는 패턴 핸들러 체인을 사용해서 요청을 처리한다 2. 패턴 적용 전 목적에 따라 매번 클라이언트는 새로 작성된 클래스를 변경해주는 코드변경을 감수해야만 한다 또한, 여러 개의 목적을 복합적으로 처리해야될 경우 새로운 문제에 봉착할 수 있다. 책임연쇄 패턴을 적용할 경우, 위의 문제점들을 해결해나갈 수 있다. @Data public class Request { private String body; public Request(String body) { this.body = body; } } public class RequestHandler { public void handler(Request request) { ..