Design Pattern Categorization
디자인 패턴에 대한 초기 학습 경험을 통해 나는 다음 표를 통해 GoF에서 언급 한 23 가지 디자인 패턴을 다룰 수있는 패턴이 무엇인지에 대해 매우 유용하게 상기시켜줍니다. 원래의 테이블은 2004 년 Elyse Nielsen에 의해 요약되었고 필자는 책의이 섹션에서 우리의 토론에 맞게 필요할 때마다 수정했습니다.
이 표를 참조로 사용하는 것이 좋지만 여기에 언급되지는 않았지만이 책의 뒷부분에서 다룰 추가 패턴이 많이 있음을 기억하십시오.
수업에 대한 간단한 설명
참고 : ES2015는 JavaScript에 대한 클래스를 기본적으로 지원하지만 JavaScript의 기존 프로토 타입 기반 상속 모델에 비해 주로 문법적인 문제가 있습니다. 이 책에서는 ES2015 수업을 다루지 않겠지 만 MDN은 훌륭한 소개가 있습니다.
이 테이블에는 "클래스"개념을 참조하는 패턴이 있습니다. ES5에서 JavaScript는 클래스없는 언어이지만 클래스는 함수를 사용하여 시뮬레이션 할 수 있습니다.
이를 달성하는 가장 일반적인 방법은 새 키워드를 사용하여 객체를 만드는 JavaScript 함수를 정의하는 것입니다. 이것은 다음과 같이 객체의 새 속성과 메서드를 정의하는 데 도움이 될 수 있습니다.
// A car "class"
function Car( model ) {
this.model = model;
this.color = "silver";
this.year = "2012";
this.getInfo = function () {
return this.model + " " + this.year;
};
}
그런 다음 위에서 정의한 Car 생성자를 사용하여 객체를 인스턴스화 할 수 있습니다.
var myCar = new Car("ford");
myCar.year = "2010";
console.log( myCar.getInfo() );
자바 스크립트를 사용하여 "클래스"를 정의하는 더 많은 방법을 보려면 Stoyan Stefanov의 유용한 게시물을 참조하십시오.
이제 표를 검토해 보겠습니다.
Creational | 객체를 생성하는 개념에 기반합니다. |
---|---|
Class | |
Factory Method | 이것은 인터페이스 된 데이터 또는 이벤트를 기반으로 여러 파생 클래스의 인스턴스를 만듭니다. |
Object | |
Abstract Factory | 구체적 클래스를 자세히 설명하지 않고 여러 클래스 패밀리의 인스턴스를 작성합니다. |
Builder | 객체 생성과 그 표현을 분리하면 항상 동일한 유형의 객체가 생성됩니다. |
Prototype | 복사 또는 복제에 사용되는 완전히 초기화 된 인스턴스입니다. |
Singleton | 글로벌 액세스 포인트가있는 인스턴스가 하나 뿐인 클래스입니다. |
Structural | 객체 블록을 만드는 아이디어를 기반으로합니다. |
---|---|
Class | |
Adapter | 따라서 서로 다른 클래스의 인터페이스를 일치 시키면 호환되지 않는 인터페이스에도 불구하고 클래스가 함께 작동 할 수 있습니다. |
Object | |
Adapter | 따라서 서로 다른 클래스의 인터페이스를 일치 시키면 호환되지 않는 인터페이스에도 불구하고 클래스가 함께 작동 할 수 있습니다. |
Bridge | 객체의 인터페이스를 구현과 분리하여 두 객체를 독립적으로 변경할 수 있습니다. |
Composite | 전체 객체를 단순한 객체의 합계 이상으로 만드는 단순하고 복합적인 객체의 구조입니다. |
Decorator | 객체에 대체 처리를 동적으로 추가합니다. |
Facade | 전체 하위 시스템의 복잡성을 숨기는 단일 클래스입니다. |
Flyweight | 다른 곳에 포함 된 정보를 효율적으로 공유하는 데 사용되는 세분화 된 인스턴스입니다. |
Proxy | true 객체를 나타내는 place holder 객체입니다. |
Behavioral | 객체가 재생되고 함께 작동하는 방식을 기반으로합니다. |
---|---|
Class | |
Interpreter | 언어 요소를 응용 프로그램에 포함시켜 의도 한 언어의 문법과 일치시키는 방법입니다. |
Template Method | 메소드에 알고리즘 쉘을 작성한 다음 정확한 단계를 서브 클래스로 연기합니다. |
Object | |
Chain of Responsibility | 객체 체인간에 요청을 전달하여 요청을 처리 할 수있는 객체를 찾는 방법입니다. |
Command | 명령 요청을 개체로 캡슐화하여 요청의 사용 가능, 로깅 및 / 또는 큐에 넣고 처리되지 않은 요청에 오류 처리를 제공합니다. |
Iterator | 컬렉션의 내부 동작을 모른 채 컬렉션의 요소에 순차적으로 액세스합니다. |
Mediator | 클래스 그룹이 서로 명시 적으로 참조하지 못하도록 클래스 간 단순화 된 통신을 정의합니다. |
Memento | 개체의 내부 상태를 캡처하여 나중에 복원 할 수 있습니다. |
Observer | 클래스 간의 일관성을 보장하기 위해 여러 클래스에 대한 변경을 알리는 방법입니다. |
State | 상태가 변경 될 때 객체의 동작을 변경합니다. |
Stategy | 구현으로부터 선택을 분리하는 클래스 내에 알고리즘을 캡슐화합니다. |
Visitor | 클래스를 변경하지 않고 클래스에 새 연산을 추가합니다. |