어댑터 패턴(Adapter Pattern)
: 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧 씌운다.
브릿지 패턴(Bridge Pattern)
: 추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있다.
합성 패턴(Composite Pattern)
: 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있다.
데코레이터 패턴(Decorator Pattern)
: 기존 객체의 메서드에 새로운 행동을 추가하거나 오버라이드 할 수 있다.
파사드 패턴(Facade Pattern)
: 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다.
플라이웨이트 패턴(Flyweight Pattern)
: 다수의 유사한 객체를 생성,조작 하는 비용을 절감할 수 있다.
프록시 패턴(Proxy Pattern)
: 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공한다.


Abstraction
: 기능 계층의 최상위 클래스이며 추상 인터페이스를 정의한다.
Implementor에 대한 레퍼런스를 유지한다.
구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현부분의 메서드를 호출한다.
RefinedAbstraction
: Abstraction에 의해 정의된 인터페이스를 확장한다.(extends) 기능 계층에서 새로운 부분을 확장한 클래스이다.
Implementor
: 구현 클래스를 위한 인터페이스를 정의한다. Abstraction의 기능을 구현하기 위한 인터페이스를 정의한다.
ConcreteImplementor
: Implementor 인터페이스를 구현 즉, 실제 기능을 구현한다.

Component
: Leaf와 Composite를 같은 타임으로 취급하기 위한 인터페이스.
Leaf 클래스와 전체에 해당하는 Composite 클래스에 공통 인터페이스를 정의한다.
Leaf
: 구체적인 부분 클래스로 단일 객체를 표현한다. 트리구조로 따지면 가장 밑단에 존재하는 나뭇잎이다.
Composite
: 복합 객체 그룹을 표현할 클래스로 전체 클래스이다. 자식으로 여러개의 Component 타입 멤버를 수용할 수 있도록 구현되어야 한다.

Component
: ConcreteComponent와 Decorator가 구현할 인터페이스. 두 객체를 동등하게 다루기 위해 존재.
ConcreteComponent
: Decorate를 받을 객체. 기능 추가를 받을 기본 객체
Decorator
: Decorate를 할 객체의 추상 클래스 or 인터페이스. 기능 추가를 할 객체는 이 객체를 상속받음.
ConcreteDecorator
: Decorator를 상속받아 구현할 다양한 기능 객체. ConcreteComponent를 감싸는 용도.
건물의 정면을 의미하는 단어로 소프트웨어의 커다란 코드 부분에 대하여 간략화된 인터페이스를 제공해주는
Client
: 클라이언트는 하위 시스템 객체들을 직접 호출하는 대신 파사드를 사용.
Facade
: 클라이언트의 요청을 어디로 보내야 하는지와 움직이는 모든 부품을 어떻게 작동해야 하는지를 알고 있다.
Additional Facade
: 하나의 파사드를 관련 없는 기능들로 오염시켜 복잡한 구조로 만드는 것을 방지할 수 있다.
Subsystem class
: 하위 시스템 클래스들은 파사드의 존재를 인식하지 못한다.
가상 인스턴스를 제공하고 싶을 때 사용하는 패턴.
Flyweight
: 공유에 사용할 클래스들의 인터페이스를 선언한다. 플라이웨이트 내부에 저장된 상태를 고유한(intrinsic) 상태라고 하며,
플라이웨이트의 메서드에 전달된 상태를 공유한(extrinsic) 상태라고 한다. 여러 Context에서 사용될 수 있다.
Context
: 공유한(extrinsic) 상태를 포함하며 모든 원본 객체들에서 고유(intrinsic)하다. 컨텍스트가 플라이웨이트 객체 중
하나와 쌍을 이루면 원래 객체의 전체 상태를 나타낸다.
FlyweightFactory
: 기존 플라이웨이트들의 풀을 관리한다. 클라이언트는 플라이웨이트를 직접 만들지 않고 원하는 플라이웨이트의 내부 상태의 일부를 전달하여
팩토리를 호출한다.

ServiceInterface
: Proxy와 Service(RealSubject)가 구현해야하는 인터페이스. 두 객체를 동일하게 다루기 위해 존재
Proxy
: RealSubject 와 클라이언트의 요청 사이에 존재하는 객체. ServiceInterface(Subject)를 구현함으로써 클라이언트는
Proxy와 RealSubject의 차이를 모른다.
Service
: 실질적으로 요청에 대해 주된 기능을 수행하는 객체(RealSubject). Proxy 객체는 내부적으로 이 객체를 로직에 맞게 사용한다.(위임)