1. 템플릿 메소드 패턴 알고리즘 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법 추상 클래스는 템플릿을 제공하고, 하위 클래스는 구체적인 알고리즘을 제공한다. AbstractClass : 템플릿 메서드를 정의하는 클래스 , 하위클래스에 공통 알고리즘을 정의하고 하위 클래스에 구체적인 알고리즘을 정의하는 클래스 templateMethod() : 알고리즘의 구조를 표현한 메소드 (데이터를 읽고,처리하고, 리턴해주는) step1() : 하위클래스의 구체적인 알고리즘1 step2() : 하위클래스의 구체적인 알고리즘2 ConcreateClass : 물려받은 templateMethod를 구현하는 클래스 step1() : 재정의가 필요한 하위클래스의 구체적인 알고리즘1 step2() : 재정의가 ..
1. 전략 패턴 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴 컨텍스트에서 사용할 알고리즘을 클라이언트가 선택한다. 2. 상태 패턴 적용 2.1. 적용 전 코드 전략(Speed)을 바꿔야할 경우, BlueLightRedLight 코드를 그 때마다 수정해줘야한다. public class BlueLightRedLight { private int speed; public BlueLightRedLight(int speed) { this.speed = speed; } public void blueLight() { if (speed == 1) { System.out.println("무 궁 화 꽃 이"); } else if (speed == 2) { System.out.println("무궁화꽃이"); }..
1. 상태 패턴 객체 내부 상태 변경에 따라 객체의 행동이 달라지는 패턴. 상태에 특화된 행동들을 분리해 낼수 있으며, 새로운 행동을 추가하더라도 다른 행동에 영향을 주지 않는다. ex) 티비가 켜있을때와 꺼져있을때의 리모콘 전원 버튼의 동작 - 티비의 상태에따라 리모톤의 동작이 변경됨. 2. 상태 패턴 적용 2.1. 적용 전 코드 OnlineCourse 내부의 addReview, addStudent 메서드의 경우 온라인 강의의 상태에 따라 동작이 변경된다. 현재는 모든 상태의 동작이 하나의 메서드 안에 구현되어있어 파악이 힘들다. public class Student { private final String name; public Student(String name) { this.name = name;..
1. 옵저버 패턴? 다수의 객체가 특정 객체 상태 변화를 감지하고 알림을 받는 패턴 발행 publish 구독 subscribe 패턴을 구현 subject > 여러 옵저버들을 등록, 해지 기능 제공 클라이언트는 서브젝트에 옵저버 등록, 서브젝트의 상태 변경 서브젝트는 상태가 변경되면 자신에게 등록된 모든 옵저버를 순회하면서 옵저버가 제공하는 메소드 호출 observer > interface observer가 해야할 일, 규약 concrete observer > observer 구현체 2. 적용하기 간단한 채팅 소스로 예시 작성 2.1. 적용전 주체가 주기적으로 요청해서 가져옴. public class ChatServer { private Map messages; public ChatServer() { th..
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); } } ..