객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴
상위 클래스와 하위 클래스가 분리되기 때문에 더 많은 유연성을 가진다.
정책 패턴이라고도 하며 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔주면서 교체가 가능하게 만드는 패턴
주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴
다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있는 구조 디자인 패턴