diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0fd9bc6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +bin +obj +main +*.o diff --git a/01.SimpleFactory/2.Code/Makefile b/01.SimpleFactory/2.Code/Makefile new file mode 100644 index 0000000..ce492a8 --- /dev/null +++ b/01.SimpleFactory/2.Code/Makefile @@ -0,0 +1,29 @@ +DIR_INC = ./ +DIR_SRC = ./ +DIR_OBJ = ./obj +DIR_BIN = ./bin + +SRC = $(wildcard ${DIR_SRC}/*.cpp) +OBJ = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC})) + +TARGET = main + +BIN_TARGET = ${DIR_BIN}/${TARGET} + +CC = g++ +CFLAGS = -g -Wall -I${DIR_INC} + + +${BIN_TARGET}:${OBJ} + mkdir -p $(DIR_BIN) + $(CC) $(OBJ) -o $@ + +${DIR_OBJ}/%.o:${DIR_SRC}/%.cpp + mkdir -p $(DIR_OBJ) + $(CC) $(CFLAGS) -c $< -o $@ + +.PHONY:clean + +clean: + rm -rf bin obj + rm -rf ./main \ No newline at end of file diff --git a/01.SimpleFactory/2.Code/SimpleFactory.h b/01.SimpleFactory/2.Code/SimpleFactory.h index 94b7aa8..17b8aa9 100644 --- a/01.SimpleFactory/2.Code/SimpleFactory.h +++ b/01.SimpleFactory/2.Code/SimpleFactory.h @@ -5,20 +5,22 @@ #include using namespace std; -//抽象产品类AbstractProduct +//鎶借薄浜у搧绫籄bstractProduct class AbstractSportProduct { public: AbstractSportProduct(){ } - virtual ~AbstractSportProduct(){} - //抽象方法: - virtual void printName(){}; - virtual void play(){}; + virtual ~AbstractSportProduct(){}; + //鎶借薄鏂规硶锛 + // virtual void printName(){}; + virtual void printName() = 0; + // virtual void play(){}; + virtual void play() = 0; }; -//具体产品类Basketball +//鍏蜂綋浜у搧绫籅asketball class Basketball :public AbstractSportProduct { public: @@ -30,7 +32,7 @@ public: { } - //具体实现方法 + //鍏蜂綋瀹炵幇鏂规硶 void printName(){ printf("Jungle get Basketball\n"); } @@ -39,7 +41,7 @@ public: } }; -//具体产品类Football +//鍏蜂綋浜у搧绫籉ootball class Football :public AbstractSportProduct { public: @@ -51,7 +53,7 @@ public: { } - //具体实现方法 + //鍏蜂綋瀹炵幇鏂规硶 void printName(){ printf("Jungle get Football\n"); } @@ -60,7 +62,7 @@ public: } }; -//具体产品类Volleyball +//鍏蜂綋浜у搧绫籚olleyball class Volleyball :public AbstractSportProduct { public: @@ -72,7 +74,7 @@ public: { } - //具体实现方法 + //鍏蜂綋瀹炵幇鏂规硶 void printName(){ printf("Jungle get Volleyball\n"); } @@ -84,17 +86,17 @@ public: class Factory { public: - AbstractSportProduct *getSportProduct(string productName) + std::shared_ptr getSportProduct(string productName) { - AbstractSportProduct *pro = NULL; + std::shared_ptr pro; if (productName == "Basketball"){ - pro = new Basketball(); + pro = std::shared_ptr(new Basketball()); } else if (productName == "Football"){ - pro = new Football(); + pro = std::shared_ptr(new Football()); } else if (productName == "Volleyball"){ - pro = new Volleyball(); + pro = std::shared_ptr(new Volleyball()); } return pro; } diff --git a/01.SimpleFactory/2.Code/main.cpp b/01.SimpleFactory/2.Code/main.cpp index 6dc0ed4..ab8dfae 100644 --- a/01.SimpleFactory/2.Code/main.cpp +++ b/01.SimpleFactory/2.Code/main.cpp @@ -1,30 +1,25 @@ #include +#include #include "SimpleFactory.h" int main() { - printf("简单工厂模式\n"); + printf("绠鍗曞伐鍘傛ā寮廫n"); - //定义工厂类对象 - Factory *fac = new Factory(); - AbstractSportProduct *product = NULL; - - product = fac->getSportProduct("Basketball"); - if (product) { - delete product; - } - + //瀹氫箟宸ュ巶绫诲璞 + std::shared_ptr fac = std::make_shared(); + // std::shared_ptr product = std::shared_ptr(fac->getSportProduct("Basketball")); + std::shared_ptr product = fac->getSportProduct("Basketball"); + + fac = std::make_shared(); product = fac->getSportProduct("Football"); - if (product) { - delete product; - } + // product = std::shared_ptr(fac->getSportProduct("Football")); + fac = std::make_shared(); product = fac->getSportProduct("Volleyball"); - if (product) { - delete product; - } - - delete fac; + // product = std::shared_ptr(fac->getSportProduct("Volleyball")); +#ifdef win32 system("pause"); +#endif return 0; } \ No newline at end of file diff --git a/02.FactoryMethod/2.Code/main.cpp b/02.FactoryMethod/2.Code/main.cpp index b332a4d..76785a7 100644 --- a/02.FactoryMethod/2.Code/main.cpp +++ b/02.FactoryMethod/2.Code/main.cpp @@ -1,44 +1,23 @@ #include #include "FactoryMethod.h" +#include int main() { printf("工厂方法模式\n"); //定义工厂类对象和产品类对象 - AbstractFactory *fac = NULL; - AbstractSportProduct *product = NULL; - - fac = new BasketballFactory(); - product = fac->getSportProduct(); - if (fac) - { - delete fac; - } - if (product) { - delete product; - } - - fac = new FootballFactory(); - product = fac->getSportProduct(); - if (fac) - { - delete fac; - } - if (product) { - delete product; - } - - fac = new VolleyballFactory(); - product = fac->getSportProduct(); - if (fac) - { - delete fac; - } - if (product) { - delete product; - } + + std::shared_ptr fac = make_shared(); + std::shared_ptr product = std::shared_ptr(fac->getSportProduct()); + fac = make_shared(); + // product = std::shared_ptr(fac->getSportProduct()); + product = std::shared_ptr(fac->getSportProduct()); + + fac = make_shared(); + product = std::shared_ptr(fac->getSportProduct()); + system("pause"); return 0; } \ No newline at end of file