디자인 패턴 (3) 제작 패턴

초보 자습서의 카탈로그에 따르면, 먼저 창작 패턴을 살펴봅시다. 혁신 모델 연구

다음은 작성 모드의 특정 모드입니다.

먼저 예를 들어 보겠습니다: 공장 모델.

한 기능의 사용자는 인터페이스만 처리하고 구현 방법은 신경 쓰지 않습니다. 이 경우 사용자가 인터페이스를 사용하는 인터페이스 클래스가 있어야 합니다. 함수 공급자는 인터페이스를 상속하고 구현합니다. 이것은 C++ 다형성을 사용합니다.

사용자는 인터페이스에만 관심이 있기 때문에 하위 클래스를 직접 사용자에게 제공하거나 사용자가 코드에서 직접 하위 클래스를 새로 만들 필요가 없습니다. 이렇게 하면 불필요한 정보를 사용자에게 노출시켜 정보의 결합성을 높일 수 있다. 만약 사용자가 여러 곳에서 하위 클래스로 분류된다면, 이 장소들을 수정해야 한다면 어떻게 바꿀 수 있을까? (윌리엄 셰익스피어, 햄릿, 지혜명언) 한 개씩만 고칠 수 있고, 고치고 나면 컴파일해야 하는데, 유지 보수가 매우 어렵다.

팩토리 모드는 기능 인터페이스의 경우 인터페이스 하위 클래스의 이름과 인터페이스 하위 클래스의 생성 프로세스를 캡슐화하는 새 팩토리 클래스를 만들고 인터페이스 사용자에게 하나의 인터페이스 포인터만 반환하는 것을 의미합니다. 인터페이스의 구현 클래스는 사용자에게 완전히 투명하며 고도로 커플링됩니다. 이렇게 하면 상위 계층 기능 사용자에게 영향을 주지 않고 인터페이스의 특정 구현을 쉽게 전환할 수 있습니다. 자동차를 예로 들다. 공장에서 자동차를 생산하는 과정이 무엇이든 자동차라면 운전 방식 (인간-기계 인터페이스) 은 비슷하다.

분명히, 공장 모델은 사용자와 구현자 사이에 패키지 계층을 추가했으며, 이는 컴퓨터 업계의 명언을 잘 보여 줍니다.

전형적인 예는 Qt 의 데이터베이스 모듈이 공장 패턴을 활용하여 데이터베이스의 기본 구현을 캡슐화한다는 것입니다. 데이터베이스 사용자 인터페이스를 그대로 유지하면서 데이터베이스 드라이버를 변경하여 데이터베이스 유형을 원활하게 전환할 수 있습니다.

수요가 안정될 때 사용하며 수요가 불안정할 때 과도하게 설계하지 마십시오. 그렇지 않으면 설계가 쉽게 낭비될 수 있습니다.

디자인 패턴의 특성상 공장 모델은 다음과 같습니다.

먼저 예: 추상 공장.

이전 공장 모드에 따르면 모든 "공장" 은 한 가지 공통점이 있습니다. 각 공장은 객체를 만드는 함수를 제공합니다. 모든 공장에서 유사한 기능을 구현했으므로 공장 하위 클래스를 만드는 기능을 정의하는 공용 인터페이스 (가상 기본 클래스) 를 공장에서 추상화할 수 있습니다. 이 장면은 낯이 익지 않습니까? 예, 공장과 공장의 기능 인터페이스는 공장 모드를 사용하는 장면을 구성합니다. 공장 자체도 공장 모델에 적합하다. 공장 모델로 공장을 설계하려면 공장을 생산하는 공장을 써야 한다. 공장을 생산하는 공장에서 반환 값은 공장의 추상 인터페이스 클래스이므로 이러한 디자인 패턴을 "추상 공장" 이라고 합니다. 사실, 나는이 디자인 패턴을 "공장 공장 모델" 이라고 부르는 것이 이해하기 쉽다고 생각합니다.

공장이 하나밖에 없다면 추상 공장을 사용하지 마라. 추상 공장은 많은 공장이 있을 때만 사용한다.

수요가 불안정할 때 과도하게 설계하지 마라, 모든 것이 전복될 가능성이 있다. 소규모 프로젝트의 경우 디자인 패턴 사용을 지나치게 추구할 필요가 없습니다. 아키텍처 코드는 전체 프로젝트 코드의 작은 부분만 차지하는 것이 좋습니다. 그렇지 않으면 우선 순위가 거꾸로 되어 문제가 있다는 것을 알게 될 것입니다. 대규모 프로젝트의 경우 수요가 안정된 상황에서 서비스 용이성과 확장성을 높이기 위해 설계 패턴을 고려할 수 있습니다. 또 추상 공장은 어느 정도 이해난이도가 있다. 당신이 디자인한 코드를 다른 사람이 읽을 수 있는지, 이해하기 쉬운지도 고려해야 한다.

그래서 디자인 패턴의 본질을 보면,

먼저 예: 단례 패턴을 살펴보자.

위의 예에서는 클래스를 여러 번 만들 수 있습니다. 클래스를 한 번만 만들 수 있도록 제한하려는 경우 즉, C 언어의 전역 변수와 같이 전역적으로 액세스할 수 있는 인스턴스를 하나만 가질 수 있도록 하려면 응용 프로그램당 하나의 응용 프로그램 객체만 있어야 합니다. 이럴 때 코드를 어떻게 써야 하나요?

답은 역시 패키지입니다. 노출하지 않으려는 정보를 숨기고 노출해야 하는 정보를 노출합니다. Singleton 모드는 클래스의 생성자를 전용 액세스로 설정하여 외부 사용자가 새 인스턴스 포인터는 특정 인터페이스를 통해서만 사용할 수 있습니다. 패키징할 때 멀티 스레드 보안을 고려해야 합니다.

한 클래스에 여러 인스턴스가 필요한 경우 단일 인스턴스 모드가 사용되지 않습니다.

디자인 패턴의 본질을 보면,

구체적인 예와 글쓰기 방법은 초보 자습서의 builder 모드를 참조하십시오.

빌더 모델의 일반적인 사용 장면은 패스트푸드점의 패키지 매치 모델입니다. 패키지는 여러 개의 개별 음식으로 구성됩니다. 한 끼 식사는 서로 다른 원료로 구성되어 있다. 이 계층 트리 오브젝트 관계의 적용 장면에서 최상위 수준 오브젝트를 만들려면 루트 오브젝트가 구성될 때까지 한 번에 한 단계씩 위로 작업해야 합니다. 이 장면에서 같은 종류의 오브젝트는 상속을 통해 와이어링할 수 있고, 다른 유형의 오브젝트는 조합을 통해 결합할 수 있습니다. 조합은 서로 다른 오브젝트를 하나의 메모리에 저장하여 전체적으로 사용하는 것입니다.

이러한 문제를 해결하기 위해 상속을 완전히 사용하는 것은 매우 격려가 되지 않는다. 디자인 패턴 이론에는' 상속 감소, 조합' 이라는 원칙이 있다. 상속은 강한 결합이고, 조합은 느슨한 결합이기 때문이다. 커플링은 수요의 변화에 적응하는데 불리하며, 프로젝트의 시한폭탄이다.

디자인 패턴의 본질을 보면,

초보 자습서에서 언급되지 않은 디자인 패턴 중 하나는 조합 패턴입니다. 자세한 내용은 섹션 4: 조합 모드 및 빌더 모드를 참조하십시오.

간단히 설명하자면, 조합 모드는 빌더 모드와 유사하며 트리 오브젝트 관계 구조를 따릅니다. 빌더 모드와 달리 하위 오브젝트와 상위 오브젝트의 유형이 같다는 점이 다릅니다. 따라서 조합 모드는 간단한 빌더 모드라고 할 수 있습니다.

구체적인 사용 사례와 예는 프로토타입 모델을 참조하십시오.

프로토타입 모드는 실제 사용에는 많이 사용되지 않을 수 있습니다. 한 문장으로 그 특징을 묘사하다.

이 클론은 메모리의 복제 동작으로, 속도가 빨라서 기존 객체의 캐시된 데이터를 최대한 활용할 수 있어 성능이 높다. 복제된 오브젝트는 원본과 동일한 특성 및 동작을 가지며 원본 오브젝트가 특정 트랜잭션을 처리하는 데 도움이 됩니다. 애니메이션의 한 단어로' 두 곳에 그림자가 있다' 는 것은 더할 나위 없이 적합하다.

디자인 패턴의 본질을 보면,

다음 문장 에서는 구조 모드를 소개합니다.