diff --git a/5.PrototypePattern/1.Picture/原型模式UML结构图.png b/5.PrototypePattern/1.Picture/原型模式UML结构图.png new file mode 100644 index 0000000..2d45924 Binary files /dev/null and b/5.PrototypePattern/1.Picture/原型模式UML结构图.png differ diff --git a/5.PrototypePattern/1.Picture/原型模式实例UML图.png b/5.PrototypePattern/1.Picture/原型模式实例UML图.png new file mode 100644 index 0000000..2a7f8b1 Binary files /dev/null and b/5.PrototypePattern/1.Picture/原型模式实例UML图.png differ diff --git a/5.PrototypePattern/2.Code/PrototypePattern.h b/5.PrototypePattern/2.Code/PrototypePattern.h new file mode 100644 index 0000000..f9adbc1 --- /dev/null +++ b/5.PrototypePattern/2.Code/PrototypePattern.h @@ -0,0 +1,70 @@ +#ifndef __PROTOTYPE_PATTERN__ +#define __PROTOTYPE_PATTERN__ + +#include +#include +using namespace std; + +//work model +class WorkModel +{ +public: + char *modelName; + void setWorkModelName(char *iName){ + this->modelName = iName; + } +}; + +//ԭPrototypeWork +class PrototypeWork +{ +public: + PrototypeWork(){} + virtual PrototypeWork *clone() = 0; + +private: + +}; + +//ԭConcreteWork +class ConcreteWork :public PrototypeWork +{ +public: + ConcreteWork(){} + ConcreteWork(char* iName, int iIdNum, char* modelName){ + this->name = iName; + this->idNum = iIdNum; + this->workModel = new WorkModel(); + this->workModel->setWorkModelName(modelName); + } + + ConcreteWork *clone(){ + ConcreteWork *work = new ConcreteWork(); + work->setName(this->name); + work->setIdNum(this->idNum); + work->workModel = this->workModel; + return work; + } + + void setName(char* iName){ + this->name = iName; + } + void setIdNum(int iIdNum){ + this->idNum = iIdNum; + } + void setModel(WorkModel *iWorkModel){ + this->workModel = iWorkModel; + } + //ӡworkϢ + void printWorkInfo(){ + printf("name:%s\t\n", this->name); + printf("idNum:%d\t\n", this->idNum); + printf("modelName:%s\t\n", this->workModel->modelName); + } +private: + char* name; + int idNum; + WorkModel *workModel; +}; + +#endif //__PROTOTYPE_PATTERN__ \ No newline at end of file diff --git a/5.PrototypePattern/2.Code/main.cpp b/5.PrototypePattern/2.Code/main.cpp new file mode 100644 index 0000000..68f1c12 --- /dev/null +++ b/5.PrototypePattern/2.Code/main.cpp @@ -0,0 +1,52 @@ +#include "PrototypePattern.h" + +int main() +{ +#if 0 + ConcreteWork *singleWork = new ConcreteWork("Single",1001,"Single_Model"); + printf("\nSingleҵ\n"); + singleWork->printWorkInfo(); + + printf("\njungleֱӳҵ\n"); + ConcreteWork *jungleWork = singleWork; + printf("\nJungleҵ\n"); + jungleWork->printWorkInfo(); + + //ֺѧţᱻʦ + printf("\njungleֺѧţᱻʦ\n"); + jungleWork->setName("jungle"); + jungleWork->setIdNum(1002); + WorkModel *jungleModel = new WorkModel(); + jungleModel->setWorkModelName("Jungle_Model"); + jungleWork->setModel(jungleModel); + + //ǷĶ + printf("\nSingleҵ\n"); + singleWork->printWorkInfo(); + printf("\nJungleҵ\n"); + jungleWork->printWorkInfo(); +#endif + + ConcreteWork *singleWork = new ConcreteWork("Single", 1001, "Single_Model"); + printf("\nSingleҵ\n"); + + ConcreteWork *jungleWork = singleWork->clone(); + printf("\nJungleҵ\n"); + + //ֺѧţᱻʦ + printf("\njungleֺѧţᱻʦ\n"); + jungleWork->setName("jungle"); + jungleWork->setIdNum(1002); + WorkModel *jungleModel = new WorkModel(); + jungleModel->setWorkModelName("Jungle_Model"); + jungleWork->setModel(jungleModel); + + //ǷĶ + printf("\nSingleҵ\n"); + singleWork->printWorkInfo(); + printf("\nJungleҵ\n"); + jungleWork->printWorkInfo(); + + system("pause"); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index f23da1d..49ea5f4 100644 --- a/README.md +++ b/README.md @@ -27,4 +27,8 @@ 07.设计模式(七)——建造者模式 -博客地址:https://blog.csdn.net/sinat_21107433/article/details/102635881 \ No newline at end of file +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102635881 + +08.设计模式(八)——原型模式 + +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102642682 \ No newline at end of file