Composite Pattern이란?

객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있다. 이 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체(composite)를 똑같은 방법으로 다룰 수 있다.


아래는 Menu와 MenuItem을 똑같이 다루기 위해 Composite Pattern을 사용한 구조




Iterator Pattern이란?

컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공


아래는 Waitress 클래스가 Iterator 인터페이스를 사용하여 MenuItem 항목에 접근하는 구조를 보여준다.



Decoration Pattern이란?

객체에 추가 요소를 동적으로 더할 수 있다. 데코레이터를 사용하면 서브 클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다.


아래는 Beverage 클래스, CondimentDecorator 추상 데코레이터와 이를 상속받은 Soy, Whip, Mocha 및 SteamMilk 데코레이터를 보여준다. StarbuzzCoffee 클래스에서 이들을 연동한다.



Observer Pattern이란?

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의


아래는 WeatherData가 Subject 객체이며 CurrentConditionDisplay 및 HeatIndexDisplay가 Observer 객체이다. Display 방식도 변화할 수 있기 때문에 Interface로 뺐다. WeatherStation 클래스에서 Subejct 및 Observer 객체를 연동한다.



Strategy Pattern이란?

알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 한다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.


아래는 Duck 클라이언트가 캡슐화된 FlyBehavior와 QuackBehavior 알고리즘군을 갖는 클래스 다이어그램이다.



+ Recent posts