Head First Design Pattern(9)
-
3. Factory & Factory Method Pattern
문제 우리 동네에는 피자집이 하나 있다. 이 피자집에서는 예전부터 한 가지 피자만 만들어서 팔았다. 그러나 손님들이 다른 메뉴도 만들어달라는 요청이 들어왔고 이에 따라 신메뉴를 만들어서 제공했다. // 기존 방식 public class PizzaStore { Pizza orderPizza() { Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } } // 새로운 방식 public class PizzaStore { Pizza orderPizza(String type) { Pizza pizza; // 피자 타입에 따라 인스턴스 생성 if (type.equals("cheese")) {..
2021.09.15 -
2. Decorator Pattern
문제 커피 주문 시스템에서 각 커피에 대한 첨가물이 추가해달라는 요구사항이 들어왔다. 이를 해결해보자. 상속 위처럼 상속을 이용해서 설계를 하면 첨가물과 커피가 늘어날 때마다 클래스를 만들어서 상속해야 한다. 이는 엄청난 복잡도를 유발하게 될 것이다. 인스턴스 변수와 슈퍼 클래스 상속 이렇게 하면 어떨까? 이 역시 문제가 많다. 첨가물 가격이 바뀔 때마다 기존 코드를 수정해야 한다. 첨가물 종류가 늘어날 경우 그에 따른 메서드를 추가해야 한다(ex.시럽). 첨가물이 들어가지 않는 음료의 경우에도 불필요한 메서드를 상속받는다(ex.아이스티). 중복된 첨가물에 대한 표현이 불가능하다(ex.더블 모카). 해결 방법 객체에 추가적인 조건을 동적으로 추가해야 하는 문제는 데코레이터 패턴을 통해 해결할 수 있다. ..
2021.09.06 -
1. Observer Pattern
문제 인터넷 기반 기상정보스테이션을 구축해달라는 요청이 들어왔다. 현재의 기상 조건(기온, 습도, 기압)을 화면에 표시하는 기능의 프로그램이다. 그래서 우리 팀은 다음과 같이 데이터를 관리하는 클래스를 작성했다. public class WeatherData { public void measurementsChanged() { float temp = getTemperature(); float humidity = getHumidity(); float pressure = getPressure(); currentConditionsDisplay.update(temp, humidity, pressure); statisticsDisplay.update(temp, humidity, pressure); forecastDi..
2021.09.06