diff --git a/3.AbstractFactory/1.Picture/~$$工厂方法模式.~vsdx b/3.AbstractFactory/1.Picture/~$$工厂方法模式.~vsdx new file mode 100644 index 0000000..9089577 Binary files /dev/null and b/3.AbstractFactory/1.Picture/~$$工厂方法模式.~vsdx differ diff --git a/3.AbstractFactory/1.Picture/抽象工厂模式UML图.png b/3.AbstractFactory/1.Picture/抽象工厂模式UML图.png new file mode 100644 index 0000000..a6b0217 Binary files /dev/null and b/3.AbstractFactory/1.Picture/抽象工厂模式UML图.png differ diff --git a/3.AbstractFactory/1.Picture/抽象工厂模式UML实例图.png b/3.AbstractFactory/1.Picture/抽象工厂模式UML实例图.png new file mode 100644 index 0000000..74f2225 Binary files /dev/null and b/3.AbstractFactory/1.Picture/抽象工厂模式UML实例图.png differ diff --git a/3.AbstractFactory/1.Picture/抽象工厂模式实例图.png b/3.AbstractFactory/1.Picture/抽象工厂模式实例图.png new file mode 100644 index 0000000..6a8de9f Binary files /dev/null and b/3.AbstractFactory/1.Picture/抽象工厂模式实例图.png differ diff --git a/3.AbstractFactory/2.Code/AbstractFactory.h b/3.AbstractFactory/2.Code/AbstractFactory.h new file mode 100644 index 0000000..e7c8f16 --- /dev/null +++ b/3.AbstractFactory/2.Code/AbstractFactory.h @@ -0,0 +1,122 @@ +#ifndef __ABSTRACT_FACTORY__ +#define __ABSTRACT_FACTORY__ + +#include +#include +using namespace std; + +//ƷAbstractBall +class AbstractBall +{ +public: + AbstractBall(){ + + } + //󷽷 + void play(){}; +}; + +//ƷBasketball +class Basketball :public AbstractBall +{ +public: + Basketball(){ + play(); + } + //ʵַ + void play(){ + printf("Jungle play Basketball\n\n"); + } +}; + +//ƷFootball +class Football :public AbstractBall +{ +public: + Football(){ + play(); + } + //ʵַ + void play(){ + printf("Jungle play Football\n\n"); + } +}; + +//ƷAbstractShirt +class AbstractShirt +{ +public: + AbstractShirt(){} + //󷽷 + void wearShirt(){}; +}; + +//ƷBasketballShirt +class BasketballShirt :public AbstractShirt +{ +public: + BasketballShirt(){ + wearShirt(); + } + //ʵַ + void wearShirt(){ + printf("Jungle wear Basketball Shirt\n\n"); + } +}; + +//ƷFootballShirt +class FootballShirt :public AbstractShirt +{ +public: + FootballShirt(){ + wearShirt(); + } + //ʵַ + void wearShirt(){ + printf("Jungle wear Football Shirt\n\n"); + } +}; + +//󹤳 +class AbstractFactory +{ +public: + virtual AbstractBall *getBall() = 0; + virtual AbstractShirt *getShirt() = 0; +}; + +//幤BasketballFactory +class BasketballFactory :public AbstractFactory +{ +public: + BasketballFactory(){ + printf("BasketballFactory\n"); + } + AbstractBall *getBall(){ + printf("Jungle get basketball\n"); + return new Basketball(); + } + AbstractShirt *getShirt(){ + printf("Jungle get basketball shirt\n"); + return new BasketballShirt(); + } +}; + +//幤BasketballFactory +class FootballFactory :public AbstractFactory +{ +public: + FootballFactory(){ + printf("FootballFactory\n"); + } + AbstractBall *getBall(){ + printf("Jungle get football\n"); + return new Football(); + } + AbstractShirt *getShirt(){ + printf("Jungle get football shirt\n"); + return new FootballShirt(); + } +}; + +#endif //__ABSTRACT_FACTORY__ \ No newline at end of file diff --git a/3.AbstractFactory/2.Code/main.cpp b/3.AbstractFactory/2.Code/main.cpp new file mode 100644 index 0000000..706b45b --- /dev/null +++ b/3.AbstractFactory/2.Code/main.cpp @@ -0,0 +1,23 @@ +#include +#include "AbstractFactory.h" + +int main() +{ + printf("ģʽ\n"); + + //幤ͲƷ + AbstractFactory *fac = NULL; + AbstractBall *ball = NULL; + AbstractShirt *shirt = NULL; + + fac = new BasketballFactory(); + ball = fac->getBall(); + shirt = fac->getShirt(); + + fac = new FootballFactory(); + ball = fac->getBall(); + shirt = fac->getShirt(); + + system("pause"); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index 9c3a83c..5d77877 100644 --- a/README.md +++ b/README.md @@ -19,4 +19,8 @@ 05.设计模式(五)——工厂方法模式 -博客地址:https://blog.csdn.net/sinat_21107433/article/details/102616501 \ No newline at end of file +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102616501 + +06.设计模式(六)——抽象工厂模式 + +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102618384 \ No newline at end of file