디자인패턴

Read Book/헤드퍼스트 디자인 패턴

12장. 복합 패턴

복합 패턴 반복적으로 생길 수 있는 일반적이 문제를 해결하는 용도로 2개 이상의 패턴을 결합해서 사용하는 것 단순히 여러 패턴을 섞어 쓴다고 해서 복합 패턴인 것은 아님 예시 1: 오리 만들기 오리 예시에 거위 추가 + 꽥꽥 소리 횟수 측정 + 오리 무리 단위로 관리 + 꽥꽥 소리 나면 연락받기 각 오리 객체(Quackable + QuackObservable) 별로 자신의 행위를 관찰할 Observer 를 저장할 수 있는 Observable( + QuackObservable) 을 저장하고 있음 이후 QuackObservable 의 메서드인 RegisterObserver 로 관찰자를 Observer 에 등록하고, 특정 행위를 수행할 때 NotifyObservers 를 호출하여 등록된 관찰자들 모두에게 알려..

Read Book/헤드퍼스트 디자인 패턴

10장. 상태 패턴

상황 예시: 뽑기 기계 만들기 public class GumballMachine { final static int SOLD_OUT = 0; // 상태 정의 final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; int state = SOLD_OUT; // 현재 상태 초기화 int count = 0; public GumballMachine(int count) { this.count = count; if (count > 0) { state = NO_QUARTER; } } public void insertQuarter() { if (state == HAS_QUARTER) { System.out.pr..

Read Book/헤드퍼스트 디자인 패턴

9장. 반복자 패턴과 컴포지트 패턴

반복자 패턴 상황 예시: 아침 메뉴와 점심 메뉴 합병 아침 메뉴 : List breakfastItems 점심 메뉴 : MenuItem[] lunchItems 아침 메뉴와 점심 메뉴를 모두 출력하고 싶은 상황 for (int i = 0; i < breakfastItems.size(); i++) { MenuItem item = breakfastItems.get(i); System.out.println(item.getName()); } for (int i = 0; i < lunchItems.length; i++) { MenuItem item = breakfastItems[i]; System.out.println(item.getName()); } 각 메뉴는 서로 다른 구현 방식을 사용하고 있으므로, 2개의 서로..

Read Book/헤드퍼스트 디자인 패턴

2장. 옵저버 패턴

예제 요구사항 기상 관측값이 갱신될 때마다, 디스플레이 요소 3가지(현재 조건 디스플레이, 기상 통계 디스플레이, 기상 예보 디스플레이)를 업데이트해줘야함 // 구체적인 구현 -> 확장에 유연하지 못한 코드 public class WeatherData { public void measurementsChanged() { float temp = getTemperature(); float humidity = getHumidity(); float pressure = getPressure(); } // 바뀔 수 있는 부분 -> 캡슐화 필요, 디스플레이 항목과 데이터 주고받는 관계에서 공통 인터페이스 currentConditionsDisplay.update(temp, humidity, pressure); stati..

Read Book/헤드퍼스트 디자인 패턴

1장. 디자인 패턴 소개와 전략 패턴

책에서는 Duck 클래스 내 quack(), fly() 메서드와 관련된 예시가 나오고, Duck 클래스를 활용한 여러 오리 클래스를 보여주고 있다. 이때 상속을 사용하게 되면 구체/서브 클래스의 구현에 의존하게 되어, 코드를 재사용한다는 점에서는 유용하지만, 변경에 유연하지 못하게 되면서 유지보수를 하기 위해서는 좋지 않게 된다. 이러한 상속의 문제를 해결하기 위해서 인터페이스를 사용할 수 있다. 디자인 원칙 1. 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다. 캡슐화나중에 바뀌지 않는 부분에는 영향을 주지 않고 기능을 고치거나 확장할 수 있음 2. 구현보다는 인터페이스에 맞춰서 프로그래밍한다. Duck 클래스에서 달라지는 부분을 구현하였던 quack() 과 fly() 대신, ..

nowwater
'디자인패턴' 태그의 글 목록