ITPub博客

首页 > 应用开发 > IT综合 > 设计模式之C#实现(一)--AbstractFactory(补) (转)

设计模式之C#实现(一)--AbstractFactory(补) (转)

原创 IT综合 作者:amyz 时间:2007-11-16 17:11:55 0 删除 编辑
设计模式之C#实现(一)--AbstractFactory(补) (转)[@more@]

此文章是为了补充下面的文章所写,详细信息可以去下面看

.NET/Develop/read_article.ASP?id=20943">http://www.csdn.net/Develop/read_article.asp?id=20943

 

GOF书中的例子用C#实现的源码:

 

using System;XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office: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.SetSide(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(object 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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 中秋思绪 (转)
请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7372123