디자인 패턴

데코레이터 패턴 기존의 객체에 동적으로 새로운 기능을 추가할 수 있게 해주는 패턴이다. 새로운 기능을 추가한 서브클래스를 생성하는 것보다 융통성 있는 방법을 제공한다. 본래의 기능을 새로운 기능이 감싸안음으로써 기능을 더할 수 있다. 구조 Component - 동적으로 추가할 서비스를 가질 가능성이 있는 객체들에 대한 인터페이스 ConcreteComponent - 추가적인 서비스가 실제로 정의되어야 할 필요가 있는 객체 Decorator - 객체에 대한 참조자를 관리하면서 Component에 정의된 인터페이스를 만족하도록 인터페이스를 정의 ComcreteDecorator - Component에 새롭게 추가할 서비스를 실제로 구현하는 클래스 기본 인터페이스 public interface Component..
컴포지트 패턴 어떤 객체들의 구성을 표현하기 위해 사용되며, 개별 객체와 복합 객체를 동일한 인터페이스를 통해 다룰 수 있도록 해주는 디자인 패턴이다. 이 패턴은 개별 객체와 복합 객체를 구분하지 않고 동일한 방식으로 취급함으로써 클라이언트 코드가 단일 객체나 객체 구성을 일관되게 처리할 수 있게 해준다. 구조 Component - 개별 객체와 복합 객체가 구현해야 하는 공통 인터페이스를 정의한다. 순환 구조에서 요소들을 포함하는 전체 클래스에 접근하는데 필요한 인터페이스를 정의하며, 적절하다면 그 인터페이스를 구현한다. Leaf - 개별 객체를 나타내며 Component 인터페이스를 구현한다. Component에 Composite - 복합 객체를 나타내며 자식 컴포넌트를 관리하고 Component 인터..
브릿지 패턴 구현에서 추상을 분리하여, 이들이 독립적으로 다양성을 가질 수 있도록 만들어준다. 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조​(추상화 및 구현)​로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴이다. 구조 Abstraction - 추상적 개념에 대한 인터페이스를 제공하고 객체 구현자에 대한 참조자를 관리한다. RefinedAbstraction - 추상적 개념에 정의된 인터페이스를 확장한다. Implementor - 구현 클래스에 대한 인터페이스를 제공한다. 실질적인 구현을 제공한 서브클래스들에 공통적인 연산의 시그니처만을 정의한다. 일반적으로 Implementor 인터페이스는 기본적인 구현 연산을 구행하고, Abstraction은 더 추상화..
어댑터 패턴 클래스의 인터페이스를 사용자가 원하는 인터페이스 형태로 적응(변환)시킨다. 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킨다. 구조 Target - 사용자가 사용할 응용 분야에 종속적인 인터페이스를 정의하는 클래스 Adaptee - 인터페이스의 적응이 필요한 기존 인터페이스를 정의하는 클래스 Adapter - Target 인터페이스에 Adaptee의 인터페이스를 적응시키는 클래스 기본 인터페이스 //클래스 어댑터 - 타겟 인터페이스에 구체 Adaptee를 실행시킨다. public interface ITarget { public void Operate(); } public class Adaptee { public void SpecificOperation() { Console.Wr..
싱글톤 패턴 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다. 시스템 런타임, 환경 세팅에 대한 정보 등 인스턴스가 여러 개일 때 발생하는 문제들을 해결할 수 있는 패턴이다. 구조 Singleton - Instance() 연산을 정의하여 유일한 인스턴스로 접근할 수 있도록 한다. 유일한 인스턴스를 생성하는 책임을 맡는다. 기본 인터페이스 //싱글톤 클래스 public class Singleton { //자기 자신을 멤버로 갖는다. private static Singleton m_instance; public int a; private Singleton(){} //Instance() 클래스는 단일체 인스턴스를 생성하고 접근하는 책임을 가진다. public stat..
프로토타입 패턴 원형이 되는 객체를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성하는데 목적은 둔 패턴이다. 구조 Prototype : 자신을 복제하는 데 필요한 인터페이스를 정의한다. ConcretePrototype - 자신을 복제하는 연산을 정의한다. Client - 원형 객체에 자기 자신의 복제를 요청하여 새로운 객체를 생성한다. 기본 인터페이스 namespace Prototype; //프로토타입 인터페이스 public interface Prototype { public Prototype Clone(); } //프로토타입 상속 클래스 public class ConcretePrototypeA : Prototype { private int a; priva..
빌더 패턴 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴이다. 생성자에 들어갈 매개변수들을 받아 객체를 생성하는 데 도움을 준다. 구조 Builder - Product 객체의 일부 요소들을 생성하기 위한 추상 인터페이스를 정의한다. ConcreteBuilder - Builder클래스에 정의된 인터페이스의 구현 서브클래스로, 제품의 부품들을 모아 빌더를 복합한다. 생성한 요소의 표현을 정리하고 관리한다. Director - Builder 인터페이스를 사용하는 객체를 합성한다. Product - 생성할 복합 객체를 표현한다. ConcreteBuilder는 제품의 내부 표현을 구축하고 복합 객체가 어떻..
추상 팩토리 패턴 상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체들을 한번에 생성하는 인터페이스를 제공하는 패턴이다. 구조 AbstractFactory - 개념적 제품에 대한 객체를 생성하는 연산으로, 인터페이스를 정의한다. ContreteFactory - 구체적인 제품에 대한 객체를 생성하는 연산은 구현한다. AbstractProduct - 개념적 제품에 대한 인터페이스를 정의한다. ConctreteProduct - 구체적으로 팩토리가 생성한 객체를 정의하고, AbstractProduct가 정의하는 인터페이스를 구현한다. Client - AbstractFactory와 AbstractProduct 클래스에 선언된 인터페이스를 사용한다. 기본 인터페이스 namespace A..
NewtronVania
'디자인 패턴' 태그의 글 목록 (3 Page)