設計模式之C#實現(一)--AbstractFactory(補) (轉)
此文章是為了補充下面的文章所寫,詳細資訊可以去下面看
/Develop/read_article.?id=20943">
GOF書中的例子用實現的原始碼:
using System;:namespace prefix = o ns = "urn:schemas--com::office" />
namespace AbstractFactory_Maze{
using Maze;
public interface AbstractFactory{
MazeClass MakeMaze();
Wall MakeWall();
Room MakeRoom(int n);
Door MakeDoor(Room oneRoom,Room otherRoom);
}
public class MazeFactory : AbstractFactory{
public MazeClass MakeMaze(){
return new MazeClass();
}
public Wall MakeWall(){
return new Wall();
}
public Room MakeRoom(int n){
return new Room(n);
}
public Door MakeDoor(Room oneRoom,Room otherRoom){
return new Door(oneRoom,otherRoom);
}
}
// this is a client
public class MazeGame{
public MazeClass MazeCreate(AbstractFactory factory){
MazeClass aMaze = factory.MakeMaze();
Room r1 = factory.MakeRoom(1);
Room r2 = factory.MakeRoom(2);
Door aDoor = factory.MakeDoor(r1,r2);
aMaze.AddRoom(r1);
aMaze.AddRoom(r2);
r1.SetS(Direction.North,factory.MakeWall());
r1.SetSide(Direction.East,aDoor);
r1.SetSide(Direction.South,factory.MakeWall());
r1.SetSide(Direction.West,factory.MakeWall());
r2.SetSide(Direction.North,factory.MakeWall());
r2.SetSide(Direction.East,factory.MakeWall());
r2.SetSide(Direction.South,factory.MakeWall());
r2.SetSide(Direction.West,aDoor);
return aMaze;
}
}
}
namespace Maze{
using System.Collections;
public class MapSite{
public virtual void Enter(){}
}
public enum Direction {North,South,East,West}
public class Room : MapSite{
public string Print(){
string result = "";
for(int i = 0 ;i<=3;i++){
switch(i){
case (int)Direction.East:{
result += "East is:"+this.GetSide(Direction.East)+"t";
break;
}
case (int)Direction.North:{
result += "North is:"+this.GetSide(Direction.North)+"t";
break;
}
case (int)Direction.South:{
result += "South is:"+this.GetSide(Direction.South)+"t";
break;
}
case (int)Direction.West:{
result += "West is:"+this.GetSide(Direction.West)+"t";
break;
}
}
}
return result;
}
public Room(int n){
this.m_roomNumber = n;
}
public MapSite GetSide(Direction dir){
return this.m_sides[(int)dir];
}
public void SetSide(Direction dir,MapSite mapSite){
this.m_sides[(int)dir] = mapSite;
}
public override void Enter(){}
private MapSite[] m_sides = new MapSite[4];
int m_roomNumber;
}
public class Wall : MapSite{
public Wall(){}
public override void Enter(){}
}
public class Door : MapSite{
public Door(Room oneRoom,Room otherRoom){}
public override void Enter(){}
public Room oneRoom{
get{return this.m_oneRoom;}
set{this.m_oneRoom = value;}
}
private Room m_oneRoom;
public Room otherRoom{
get{return this.m_otherRoom;}
set{this.m_otherRoom = value;}
}
private Room m_otherRoom;
private bool m_isOpen;
public bool IsOpen{
get{return this.m_isOpen;}
set{this.m_isOpen = value;}
}
}
public class MazeClass{
public MazeClass(){}
public string Print(){
string result = "";
for(int i = 0; i<=this.m_Maze.Count-1;i++){
result +=this.RoomNumber(i).Print()+"n";
}
return result;
}
public void AddRoom(Room room){
m_Maze.Add(room);
}
public Room RoomNumber(int roomNumber){
return (Room)this.m_Maze[roomNumber];
}
private ArrayList m_Maze = new ArrayList();
}
}
private void Form1_Load( sender, System.EventArgs e) {
AbstractFactory factory = new MazeFactory();
MazeGame game = new MazeGame();
MazeClass aMaze = game.MazeCreate(factory);
this.richTextBox1.AppendText(aMaze.Print());
}
North is:Maze.Wall South is:Maze.Wall East is:Maze.Door West is:Maze.Wall
North is:Maze.Wall South is:Maze.Wall East is:Maze.Wall West is:Maze.Door
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982708/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式之-抽象工廠-AbstractFactory設計模式抽象
- C#設計模式之代理模式(一)C#設計模式
- C#設計模式之命令模式C#設計模式
- 設計模式-C#實現簡單工廠模式設計模式C#
- C#設計模式之單例模式C#設計模式單例
- C#設計模式之狀態模式C#設計模式
- C#設計模式之享元模式C#設計模式
- C#設計模式之組合模式C#設計模式
- C#設計模式之迭代器模式C#設計模式
- C#設計模式之代理模式(四)C#設計模式
- C#設計模式之代理模式(三)C#設計模式
- C#設計模式之代理模式(二)C#設計模式
- 【php實現設計模式】之單例模式PHP設計模式單例
- 設計模式、用Delphi實現---->Builder模式 (轉)設計模式UI
- [用設計模式鍛鍊C#系列]之Strategy (轉)設計模式C#
- [用設計模式鍛鍊C#系列]之Builder (轉)設計模式C#UI
- [用設計模式鍛鍊C#系列]之Decorator (轉)設計模式C#
- C#設計模式之介面卡模式C#設計模式
- C#設計模式之訪問者模式C#設計模式
- C#設計模式之職責鏈模式C#設計模式
- 玩轉設計模式——設計模式之禪設計模式
- Go語言實現設計模式之命令模式Go設計模式
- 設計模式、用Delphi實現---->Singleton 模式 (轉)設計模式
- C#設計模式之訂閱釋出模式C#設計模式
- 設計模式之:享元模式FlyweightPattern的實現設計模式
- AspectJ實現設計模式(三)——工廠方法模式 (轉)設計模式
- C#設計模式之總結篇C#設計模式
- 一.設計模式之工廠設計模式設計模式
- Go 實現常用設計模式(一)單例模式Go設計模式單例
- 設計模式的征途(C#實現)—文章目錄索引設計模式C#索引
- C++設計模式:Singleton的模板實現之一 (轉)C++設計模式
- MSDN 訪談錄之C#程式設計一 (轉)C#程式設計
- [用設計模式鍛鍊C#系列]之Singleton、Bridge (轉)設計模式C#
- C#設計模式(一)訂閱-釋出模式C#設計模式
- 使用C# (.NET Core) 實現命令設計模式 (Command Pattern)C#設計模式
- 使用C# (.NET Core) 實現狀態設計模式 (State Pattern)C#設計模式
- 使用C# (.NET Core) 實現迭代器設計模式 (Iterator Pattern)C#設計模式
- 設計模式之觀察者模式(一)設計模式