// 다음 코드 소스 : 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;}