资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第二部分 创建型设计模式,工厂方法模式(Factory Method Pattern),简单工厂模式(Simple Factory Pattern),单件模式(Singleton Pattern),构造器模式(Builder Pattern),原型模式(Prototype Pattern),抽象工厂模式(Abstract Factory Pattern),工厂方法模式,CreateAndUse(),class Client,public:,void CreateAndUse(),int sum=0;,Dog*dog=new Dog;,sum+=dog-Sale();,delete dog;,Cat*cat=new Cat;,sum+=cat-Sale();,delete cat;,Fish*fish=new Fish;,sum+=fish-Sale();,delete fish;,coutsumSale();,delete ani;,IAnimal*,ani=new Cat;,sum+=cat-Sale();,delete ani;,IAnimal*,ani=new Fish;,sum+=ani Sale();,delete ani;,coutsumSale();,delete ani;,IAnimal*ani=,CreateCat();,sum+=ani-Sale();,delete ani;,IAnimal*ani=,CreateFish();,sum+=ani-Sale();,delete ani;,cout“Total Sale:”Sale();,delete ani;,IAnimal*ani=,fac.CreateCat();,sum+=ani-Sale();,delete ani;,IAnimal*ani=,fac.,CreateFish();,sum+=ani-Sale();,delete ani;,cout“Total Sale:”Sale();,delete ani;,IAnimal*ani=,fac.CreateAnimal(C);,sum+=ani-Sale();,delete ani;,IAnimal*ani=,fac.,CreateAnimal(F);,sum+=ani-Sale();,delete ani;,cout“Total Sale:”AddRoom(r1);,aMaze-AddRoom(r2);,r1-SetSide(North,makeWall();,r1-SetSide(East,door);,r1-SetSide(South,makeWall();,r1-SetSide(West,makeWall();,r2-SetSide(North,makeWall();,r2-SetSide(East,makeWall();,r2-SetSide(South,makeWall();,r2-SetSide(West,door);,return aMaze;,MazeFactory的子类BombedMazeFactory,class BombedMazeFactory:public MazeFactor,Public:,BombedMazeFactory();,virtual Wall*MakeWall()const return new BombedWall;,virtual Room*MakeRoom(int n)const return new RoomWithABomb(n);,;,MazeFactory的子类EnchantedMazeFactory,class EnchantedMazeFactory:public MazeFactroy,public:,EnchantedMazeFactory();,virtual Room*MakeRoom(int n)const,return new EnchantedRoom(n,CastSpell();,Virtual Door*MakeDoor(Room*r1,Room*r2)const,return new DoorNeedingSpell(r1,r2);,protected:,Spell*CastSpell()const;,;,Factory的使用,Class Game,Public:,Game(MazeFactory&fac),aMaze=fac.CreateMaze();,Private:,Maze *aMaze;,;,Factory中的CreateMaze也可以放到Game中。,Class Game,Public:,Game(MazeFactory&fac),aMaze=CreateMaze(fac);,Protected:,Maze*CreateMaze(MazeFactory&fac),/将例中的MakeRoom等改成,/fac.MakeRoom。略,Private:,Maze *aMaze;,;,template,class MyCreator:public Creator,public:,virtual Product*CreateProduct();,;,template,Product*MyCreator:CreateProduct(),return new TheProduct;,
展开阅读全文