공장 설계 패턴과 코드 패턴 특성 구조

소프트웨어 디자인 패턴 분야는 개발자를위한 전문 디자인 경험을 사용하는 효과적인 방법을 제공합니다. 캡슐화, 상속, 다형성 (polymorphism) : 객체 지향 프로그래밍 언어의 중요한 기능을 사용하여 디자인 모드.

이 문서는 공장 모드로 상세히 설명했다.

첫째, 디자인 패턴의 분류는
전반적으로 세 가지 범주로 패턴을 디자인 :

팩토리 메소드 패턴, 추상 팩토리 패턴, 싱글, 빌더 패턴, 프로토 타입 모델 : 스키마, 다섯 개 가지 범주의 총을 만듭니다.

구조 모델 일곱 종류의 총 : 어댑터 모드, 장식 모드, 프록시 모드, 외관 모드, 브리지 모드, 복합 모드, 플라이급.

행동 패턴, 십일가지 총 : 전략 패턴, 템플릿 메소드 패턴, 관찰자 ​​모드, 반복자 패턴, 책임 체인 모드, 명령 모드, 메모 모드 상태 모드, 방문자 패턴, 중간 모델은 모드를 설명합니다.

또한 두 가지가 있습니다 : 동시성 패턴 및 스레드 풀 모드.

 

둘째, 일반적인 원칙과 디자인 패턴의 여섯 개 원칙
일반 원칙 :

개방 - 폐쇄 원칙 (개방 - 폐쇄 원칙)
개방 및 확장을위한 개방 원칙을 마감하지만, 수정을 위해 마감했다. 프로그램을 확장해야하는 경우, 원래의 코드를 수정,하지만 핫 스왑의 효과를 달성하기 위해 기존 코드를 확장 할 수 없습니다. 프로그램 더 나은 확장 성을 유지 보수 및 업그레이드의 용이성하기 위해서는 : 그래서 한 문장으로 요약. 이 효과를 달성하고자, 우리는 상세 설계를 수행 등의 인터페이스와 추상 클래스를 사용해야합니다, 우리는이 점을 언급 할 것이다.

여섯 개 원칙

  1. 단일 책임의 원칙 : 그들은 클래스를 분할해야 각 클래스가 실패, 하나의 책임을 구현해야한다는 것을 의미 변화에 대한 하나 개 이상의 클래스 리드,이없는 이유.

  2, 대체 원칙 리히터있는 기본 클래스를 표시 할 수있는 장소에 (리스 코프 치환 원칙) 리히터 대체 원리는, 서브 클래스는 표시 할 수 있습니다. 

  특정에 의존하지 않는 추상적 인에 의존 지향 프로그래밍 인터페이스, 3. 의존 관계 역전 원칙 (의존 반전 원리는) 이는 개폐, 특정 콘텐츠의 원칙에 기초한다.

  4, 인터페이스 분리의 원칙 (인터페이스 독방 원리) 원리는 의미 : 서브 클래스가 구현해야하지만, 그렇지 않은 경우, 인터페이스가 분할 될 것입니다, 각 인터페이스에 존재하지 않는 것보다 덜.

  5 인 데메테르의 법칙 (가장 알려진 원칙) (데메테르 원칙) : 자신의 의지의 클래스는 더 나은 클래스를 알고있다. 즉, 아무리 복잡한 종속 클래스, 논리는 패키지 방식의 내부해야한다.

  도 6은, 원칙을 멀티플렉싱 (복합 재사용 원리) 원리 합성 상속 대신 / 합성 중합체 정보의 처음 사용하는 것이다.

 

셋째, 공장 패턴

공장 패턴은 세 가지 범주, 간단한 공장 패턴, 팩토리 메소드 패턴, 추상 팩토리 패턴으로 분할 될 수있다 만든 스키마를 속

시나리오 :

다음은 응용 프로그램 장면 추상 팩토리 패턴을 설명하기 위해 : 개체가이 상호 또는 상호 의존적 인 제품군 시간의 시리즈를 생성해야하는 경우, 당신은 추상 팩토리 패턴을 사용할 수 있습니다. 이상의 복수 존재하는 경우 명백한 지점 계승 계층, 계층 인 (즉, 추상적 복수의 클래스가있다), 및 속하는 계층 구조는 그 중 일부와 연관된 각각의 구현 클래스 또는 제약간에 존재에 당신은 추상 팩토리 패턴을 사용할 수 있습니다. 상관 관계가 제품을 만들기 위해 별도의 공장의 복수를 사용하여, 다양한 제약 조건 또는 구현 클래스 계층 구조 사이에 존재하지 않는 경우가 더 적합합니다.

1, 간단한 공장 패턴, 주요 기능은 해당 제품을 만드는 공장 클래스의 판단을 할 필요가있다. 새로운 제품을 추가 할 때, 우리는 공장 클래스를 수정해야합니다. 다소 추상적 예를 들어 이해합니다. 제조 업체의 프로세서 코어의 생산은 프로세서 코어의 두 가지 유형을 생성 할 수있는 단 하나의 공장을 가지고있다. 고객은 종류의 프로세서 코어에, 우리는 명시 적으로 제조 공장을 얘기해야 할 일이 필요합니다. 하나의 구현은 아래와 같습니다.

간단한 공장 패턴의 UML 다이어그램 :

코드 :

열거 CTYPE {COREA, COREB};     
클래스 싱글 코어     
{     
공개 :    
     가상  무효 쇼 () = 0 ;  
};    
// 单核의     
클래스 SingleCoreA : 공공 싱글 코어     
{     
공개 :    
     무효 쇼 () {cout을 << " 싱글 코어 " << endl의; }     
};    
// 单核B의     
클래스 SingleCoreB : 공용 싱글 코어     
{     
공개 :    
     무효 표시 () {COUT <<" 싱글 코어 B " << ENDL}     
}     
// 식물 만, 프로세서 코어의 두 종류를 생성 할 수는 내 판정     
클래스 공장의     
{     
공개 :      
    싱글 코어 * CreateSingleCore ( ENUM CTYPE CTYPE)     
    {     
        IF (CTYPE == COREA ) // 공장이 결정 내에서     
            반환  새로운 새 ) (SingleCoreA를; //이 핵을 생산     
        다른  IF (CTYPE == COREB)    
             반환  새로운 새로운 SingleCoreB (); //이 핵 B를 생산     
        다른     
            반환 NULL을;     
    }    
};    

주요 단점 : 당신이 새로운 핵 유형을 추가 할 때, 우리는 공장 클래스를 수정해야합니다. 소프트웨어 엔티티 (클래스, 모듈, 함수)를 확장 할 수 있지만 수정할 수 없습니다 :이 개방 - 폐쇄 원칙을 위반하는 것입니다.

(2) 공장 메소드 패턴은 인터페이스 정의 객체를 생성하는 수단은, 그래서 클래스의 서브 클래스의 인스턴스를 결정한다. 공장 방법은 하위 클래스를 지연 클래스 인스턴스를 확인합니다. 그것은 매우 추상적 소리, 또는 예에 불과 설명했다. 집에서 프로세서 코어의 용량을 원래의 공장은 싱글 코어 A를 모델의 생산에 전념하면서 그래서, B의 싱글 코어 모델의 생산 전용 공장을 설정하기로 결정 많은 돈,이 생산. 이 때, 고객은 핵 A를 모델이 될 수있는 공장을 찾기 위해, 예를 들어, 좋은 공장을 찾기해야하고, 그렇지 않으면 더 이상 필요가의 식물 특정 프로세서 코어의 유형을 말한 적이 될 수있는 B 공장을 찾을 수 있습니다.

도 UML 공장 방법 :

클래스 싱글 코어     
{     
공개 :    
     가상  무효 쇼 () = 0 ;  
};    
// 单核의     
클래스 SingleCoreA : 공공 싱글 코어     
{     
공개 :    
     무효 쇼 () {cout을 << " 싱글 코어 " << endl의; }     
};    
// 单核B의     
클래스 SingleCoreB : 공공 싱글 코어     
{     
공개 :    
     무효 쇼 () {cout을 << " 싱글 코어 B "<< ENDL는;}     
};     
클래스는 공장의     
{     
공개 :    
     가상 싱글 코어 CreateSingleCore *는 () = 0 ;   
};     
// 생산 원자력 발전소의     
클래스 FactoryA : 공공 공장의     
{     
공개 :     
    SingleCoreA * CreateSingleCore는 () { 반환  새 새 SingleCoreA을;}     
} ;     
// 생산 공장 핵 B의     
클래스 FactoryB : 공공 공장의     
{     
공개 :     
    SingleCoreB * CreateSingleCore () {반환  새로운 SingleCoreB을; }     
};    

공장 방법 패턴 단점 : 각 추가 제품, 우리는 공장 개체를 추가해야합니다. 이 회사는 빠르게 발전하는 경우 많은 새로운 프로세서 코어의 도입, 그것은 해당하는 새로운 공장을 열 것입니다. C ++ 구현에서는 팩토리 클래스 중 하나를 정의하는 것입니다. 물론, 간단한 공장 패턴에 비해, 팩토리 메소드는 더 클래스 정의가 필요합니다.

3, 추상 팩토리 패턴은 예를 들어, 회사의 기술은 단일 코어 프로세서를 생산할 수있는 멀티 코어 프로세서를 생성 할 수 있습니다뿐만 아니라 진행하고 있습니다. 이제 모두의 범위를 넘어 간단한 공장 패턴 및 공장 방법 패턴. 추상 팩토리 패턴 데뷔. 그것은 자신의 구체적인 종류를 지정하지 않고 인터페이스의 생성에 관련된 의존성 또는 개체의 시리즈로서 정의된다. 다른 식물 단심 B 형 멀티 코어 프로세서를 생산하도록 설계하면서 구체적으로 본 출원은, 그것은 여전히 ​​특형 단일 코어 멀티 코어 프로세서의 제조에 오픈 두 식물이다.

  추상 팩토리 패턴 UML 다이어그램 :

다음 코드는 구현이 제공됩니다.

//单核    
class SingleCore     
{    
public:    
    virtual void Show() = 0;  
};    
class SingleCoreA: public SingleCore      
{    
public:    
    void Show() { cout<<"Single Core A"<<endl; }    
};    
class SingleCoreB :public SingleCore    
{    
public:    
    void Show() { cout<<"Single Core B"<<endl; }    
};    
//多核    
class MultiCore      
{    
public:    
    virtual void Show() = 0;  
};    
class MultiCoreA : public MultiCore      
{    
public:    
    void Show() { cout<<"Multi Core A"<<endl; }    
    
};    
class MultiCoreB : public MultiCore      
{    
public:    
    void Show() { cout<<"Multi Core B"<<endl; }    
};    
//工厂    
class CoreFactory      
{    
public:    
    virtual SingleCore* CreateSingleCore() = 0;  
    virtual MultiCore* CreateMultiCore() = 0;  
};    
//工厂A,专门用来生产A型号的处理器    
class FactoryA :public CoreFactory    
{    
public:    
    SingleCore* CreateSingleCore() { return new SingleCoreA(); }    
    MultiCore* CreateMultiCore() { return new MultiCoreA(); }    
};    
//工厂B,专门用来生产B型号的处理器    
class FactoryB : public CoreFactory    
{    
public:    
    SingleCore* CreateSingleCore() { return new SingleCoreB(); }    
    MultiCore* CreateMultiCore() { return new MultiCoreB(); }    
};   

抽象工厂模式中的多台机制:通过父类的虚函数实现动态联编。

抽象工厂模式的优点:

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

抽象工厂模式的缺点:

产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

至此,工厂模式介绍完了。

代码地址:https://github.com/Jonahmoon/SoftwareEngineering.git

 

추천

출처www.cnblogs.com/jonahmoon/p/11997893.html