本文在gof《設計模式》一書「建立型模式」一章的例子和模式的基礎上,將各個建立型模式有機的結合在一起。實現了「迷宮」構造過程的封裝,增強了構造不同迷宮的可擴充套件性。
建立型模式:
抽象工廠
工廠方法
生成器原型
單件其中,抽象工廠是由工廠方法組成的,是一組相互關聯的工廠方法的集合。
「迷宮」構造類圖:
以下是各個模組的c++實現:
#ifndef _part_h_
#define _part_h_
//part.h
enum direction
;class mapsite
;class room:public mapsite
mapsite* getside(direction d) const
void setside(direction d, mapsite* ms)
virtual
void enter()
virtual
char* getinfo()
int roomno() const
private:
mapsite* _sides[4];
int _roomno;
};class wall:public mapsite
virtual
void enter()
virtual
char* getinfo()
};class door:public mapsite
room* othersidefrom(room* r)
virtual
void enter()
virtual
char* getinfo()
private:
room* _room1;
room* _room2;
bool _isopen;
};class spell
};class enchantedroom: public room
virtual
void enter()
virtual
char* getinfo()
private:
spell* _spell;
};class doorneedingspell:public door
virtual
void enter()
virtual
char* getinfo()
};class roomwithabomb: public room
virtual
void enter()
virtual
char* getinfo()
};class bombedwall:public wall
virtual
void enter()
virtual
char* getinfo()
};class maze
_xsize = xsize;
_ysize = ysize;
_roomlist = new room*[_xsize*_ysize];
for(int i=0; i<_xsize*_ysize; ++i)
_roomlist[i] = 0;
}void addroom(room* r)
room* roomno(int rno) const
return 0;
}int xsize() const
int yszie() const
int size() const
~maze()
private:
room** _roomlist;
int _xsize;
int _ysize;
}; #endif
//partfactory.h
#ifndef _part_factory_h_
#define _part_factory_h_
#include "part.h"
#include
class bombedpartfactory;
class enchantedpartfactory;
class partfactory
private:
static std::string _mazestyle;
static partfactory* _instance;
protected:
partfactory(){}
public:
virtual room* makeroom(int rno) const
virtual wall* makewall() const
virtual door* makedoor(room* r1, room* r2) const
};class enchantedpartfactory:public partfactory
virtual room* makeroom(int rno) const
virtual door* makedoor(room* r1, room* r2) const
protected:
spell* castspell() const
};class bombedpartfactory:public partfactory
virtual room* makeroom(int rno) const
virtual wall* makewall() const
}; #endif
//partfactory.cpp
#include "partfactory.h"
partfactory* partfactory::_instance = 0;
std::string partfactory::_mazestyle;
partfactory* partfactory::instance()
return _instance;}
//mazebuilder.h
#ifndef _maze_builder_h_
#define _maze_builder_h_
#include "partfactory.h"
class mazebuilder
void buildmaze()
maze* getmaze()
virtual
void buildroom(int rno)
virtual
void builddoor(int roomfrom, int roomto)
protected:
direction commonwall(room* r1, room* r2)
maze* _maze;
partfactory* _factory;
};class stdmazebuilder:public mazebuilder
virtual
void buildroom(int rno)
}virtual
void builddoor(int roomfrom, int roomto)
}; #endif
//mazedrawer.h
#ifndef _maze_draw_h_
#define _maze_draw_h_
#include "part.h"
#include
class mazedrawer
std::cout << " "
<< dir << ":"
<< r->getside((direction)j)->getinfo() << std::endl;}}
}}}; #endif
//mazegame.h
#ifndef _maze_game_h_
#define _maze_game_h_
#include "mazebuilder.h"
#include "mazedrawer.h"
class mazegame
virtual maze* createmaze(mazebuilder& mb) = 0;
void deletemaze(maze* maze)
{}void drawmaze(maze* maze)
private:
mazedrawer* _mazedrawer;
};class game1:public mazegame
virtual maze* createmaze(mazebuilder& mb)
}; #endif
// mazegame.cpp : 定義控制台應用程式的入口點。
// #include "stdafx.h"
#include "mazegame.h"
int _tmain(int argc, _tchar* argv)
希望通道中人提出意見建議,共同改善完善,共同交流:[email protected]
建立型模式 原型模式
使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...
建立型模式 原型模式
原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...
原型模式 建立型模式
文章首發個人部落格 如果我們有乙個類 sheep 它裡面有兩個屬性,名稱 name 年齡 age 現在我們有乙個它的例項 s1 我們需要按照這個例項的屬性再去建立兩個物件。1 sheep data public class sheep 2 main public class main 原型模式 用原...