diff --git a/2.FactoryMethod/1.Picture/~$$工厂方法模式.~vsdx b/2.FactoryMethod/1.Picture/~$$工厂方法模式.~vsdx new file mode 100644 index 0000000..9089577 Binary files /dev/null and b/2.FactoryMethod/1.Picture/~$$工厂方法模式.~vsdx differ diff --git a/2.FactoryMethod/1.Picture/工厂方法模式.png b/2.FactoryMethod/1.Picture/工厂方法模式.png new file mode 100644 index 0000000..f4b7b5f Binary files /dev/null and b/2.FactoryMethod/1.Picture/工厂方法模式.png differ diff --git a/2.FactoryMethod/1.Picture/工厂方法模式UML图.png b/2.FactoryMethod/1.Picture/工厂方法模式UML图.png new file mode 100644 index 0000000..92237bd Binary files /dev/null and b/2.FactoryMethod/1.Picture/工厂方法模式UML图.png differ diff --git a/2.FactoryMethod/1.Picture/工厂方法模式UML实例图.png b/2.FactoryMethod/1.Picture/工厂方法模式UML实例图.png new file mode 100644 index 0000000..92237bd Binary files /dev/null and b/2.FactoryMethod/1.Picture/工厂方法模式UML实例图.png differ diff --git a/2.FactoryMethod/2.Code/FactoryMethod.h b/2.FactoryMethod/2.Code/FactoryMethod.h new file mode 100644 index 0000000..df1231b --- /dev/null +++ b/2.FactoryMethod/2.Code/FactoryMethod.h @@ -0,0 +1,116 @@ +#ifndef __FACTORY_METHOD__ +#define __FACTORY_METHOD__ + +#include +#include +using namespace std; + +//ƷAbstractProduct +class AbstractSportProduct +{ +public: + AbstractSportProduct(){ + + } + //󷽷 + void printName(){}; + void play(){}; +}; + +//ƷBasketball +class Basketball :public AbstractSportProduct +{ +public: + Basketball(){ + printName(); + play(); + } + //ʵַ + void printName(){ + printf("Jungle get Basketball\n"); + } + void play(){ + printf("Jungle play Basketball\n\n"); + } +}; + +//ƷFootball +class Football :public AbstractSportProduct +{ +public: + Football(){ + printName(); + play(); + } + //ʵַ + void printName(){ + printf("Jungle get Football\n"); + } + void play(){ + printf("Jungle play Football\n\n"); + } +}; + +//ƷVolleyball +class Volleyball :public AbstractSportProduct +{ +public: + Volleyball(){ + printName(); + play(); + } + //ʵַ + void printName(){ + printf("Jungle get Volleyball\n"); + } + void play(){ + printf("Jungle play Volleyball\n\n"); + } +}; + +//󹤳 +class AbstractFactory +{ +public: + virtual AbstractSportProduct *getSportProduct() = 0; +}; + +//幤BasketballFactory +class BasketballFactory :public AbstractFactory +{ +public: + BasketballFactory(){ + printf("BasketballFactory\n"); + } + AbstractSportProduct *getSportProduct(){ + printf("basketball"); + return new Basketball(); + } +}; + +//幤FootballFactory +class FootballFactory :public AbstractFactory +{ +public: + FootballFactory(){ + printf("FootballFactory\n"); + } + AbstractSportProduct *getSportProduct(){ + return new Football(); + } +}; + +//幤VolleyballFactory +class VolleyballFactory :public AbstractFactory +{ +public: + VolleyballFactory(){ + printf("VolleyballFactory\n"); + } + AbstractSportProduct *getSportProduct(){ + return new Volleyball(); + } +}; + + +#endif //__FACTORY_METHOD__ \ No newline at end of file diff --git a/2.FactoryMethod/2.Code/main.cpp b/2.FactoryMethod/2.Code/main.cpp new file mode 100644 index 0000000..f8b8946 --- /dev/null +++ b/2.FactoryMethod/2.Code/main.cpp @@ -0,0 +1,23 @@ +#include +#include "FactoryMethod.h" + +int main() +{ + printf("ģʽ\n"); + + //幤ͲƷ + AbstractFactory *fac = NULL; + AbstractSportProduct *product = NULL; + + fac = new BasketballFactory(); + product = fac->getSportProduct(); + + fac = new FootballFactory(); + product = fac->getSportProduct(); + + fac = new VolleyballFactory(); + product = fac->getSportProduct(); + + system("pause"); + return 0; +} \ No newline at end of file