디자인 패턴 - 추상 공장 (AbstractFactory) (모델).

// 다음 코드 소스 : 23 개 디자인 패턴 -GoF 미세 패턴 디자인 솔루션 탈착 및 C ++ 소스 코드를 달성하기 위해

//Product.h

의 #pragma클래스 AbstractProductA {
 공개 :
     가상 ~ AbstractProductA ();
보호 : 
    AbstractProductA (); 
개인 : 

}; 

클래스 AbstractProductB {
 공개 :
     가상 ~ AbstractProductB ();
보호 : 
    AbstractProductB (); 
개인 : 
}; 

클래스 ProductA1 : 공공 AbstractProductA {
 공개 : 
    ProductA1 (); 
    가상 ~ ProductA1 ();
개인 :
보호 : 

}; 

클래스 ProductA2 : 공공 AbstractProductA {
 공개 : 
    ProductA2 (); 
    가상 ~ ProductA2 ();
보호 :
 개인 : 
}; 

클래스 ProductB1 : 공공 AbstractProductB {
 공개 : 
    ProductB1 (); 
    가상 ~ ProductB1 ();
보호 :
 개인 : 

}; 

클래스 ProductB2 : 공공 AbstractProductB {
 공개 : 
    ProductB2 (); 
    가상 ~ProductB2 ();
보호 :
 개인 : 

};

//Product.cpp

사용법 #include " Product.h " 
사용법 #include <iostream> 

AbstractProductA :: AbstractProductA () {} 
AbstractProductA :: ~ AbstractProductA () {} 
AbstractProductB :: AbstractProductB () {} 
AbstractProductB :: ~ AbstractProductB () {} 
ProductA1 :: ProductA1 () { 
    표준 : COUT << " ProductA1 " << 표준 : ENDL; 
} 
ProductA1 :: ~ ProductA1 () {} 
ProductA2 :: ProductA2 () { 
    표준 : COUT << " ProductA2 " << 표준 : ENDL; 
} 
ProductA2 ::ProductA2 () {} 

ProductB1 :: ProductB1 () { 
    표준 : COUT << " ProductB1 " << 표준 : ENDL; 
} 
ProductB1 :: ~ ProductB1 () {} 
ProductB2 :: ProductB2 () { 
    표준 : COUT << " ProductB2 " << 표준 : ENDL; 
} 
ProductB2 :: ~ ProductB2 () { 

}

//AbstractFactory.h

의 #pragma클래스 AbstractProductA;
클래스 AbstractProductB;
클래스 AbstractFactory { 

공개 :
     가상 ~ AbstractFactory ();
    가상 AbstractProductA concreateProductA * () = 0 ;
    가상 AbstractProductB concreateProductB * () = 0 ;
보호 : 
    AbstractFactory (); 
개인 : 
}; 

클래스 concreateFactory1 : 공공 AbstractFactory {
 공개 : 
    concreateFactory1 (); 
    가상 ~concreateFactory1 (); 
    AbstractProductA * concreateProductA (); 
    AbstractProductB * concreateProductB ();
보호 :
 개인 : 
}; 

클래스 concreateFactory2 : 공공 AbstractFactory {
 공개 : 
    concreateFactory2 (); 
    가상 ~ concreateFactory2 (); 
    AbstractProductA * concreateProductA (); 
    AbstractProductB * concreateProductB ();
보호 :
 개인 : 
};

//AbstractFactory.cpp

사용법 #include " Product.h " 
사용법 #include " AbstractFactory.h " 
사용법 #include <iostream> 

AbstractFactory :: ~ AbstractFactory () {} 
AbstractFactory :: AbstractFactory () {} 

concreateFactory1 :: concreateFactory1 () {} 
concreateFactory1 :: ~ concreateFactory1 ( ) {} 
AbstractProductA * concreateFactory1 :: concreateProductA는 () {
     반환  ) (ProductA1을; 
} 
AbstractProductB * concreateFactory1 :: concreateProductB는 () {
     반환  ) (ProductB1을; 
} 

concreateFactory2 ::~ concreateFactory2 () {} 
concreateFactory2 :: concreateFactory2 () {} 

AbstractProductA * concreateFactory2 :: concreateProductA () 
{ 
    반환  ProductA2을 (); 
} 
AbstractProductB * concreateFactory2 :: concreateProductB는 () 
{ 
    반환  ) (ProductB2을; 
}

//main.cpp

사용법 #include " Product.h " 
사용법 #include " AbstractFactory.h " 
#INCLUDE <iostream> INT 의 main () 
{ 
    AbstractFactory * = fac1 새로운 concreateFactory1 (); 
    fac1 -> concreateProductA (); 
    fac1 -> concreateProductB (); 
    AbstractFactory * = FAC2 새로운 concreateFactory2 (); 
    FAC2 -> concreateProductA (); 
    FAC2 -> concreateProductB ();
    반환 0 ; 
}

 

 

사용법 #include "Product.h"사용법 #include "AbstractFactory.h"#INCLUDE <iostream>
INT의 main () {AbstractFactory * = fac1 새로운 concreateFactory1 (); fac1-> concreateProductA (); fac1-> concreateProductB (); AbstractFactory *의 FAC2 새로운 concreateFactory2 = (); fac2-> concreateProductA (); fac2-> concreateProductB (); 반환 0;}

추천

출처www.cnblogs.com/fourmi/p/12074951.html