建造者

来源:互联网 发布:北京国贸中心数据 编辑:程序博客网 时间:2024/04/27 21:12

import java.util.ArrayList;


class Home
{
 public static class Room
 {
  public Room(Integer iRoomID, String szView)
  {
   ROOM_ID = iRoomID;
   ROOM_VIEW = szView;
  }
  public final Integer ROOM_ID;
  public final String ROOM_VIEW;
 }
 public static class Door
 {
  public Door(Integer iRoomTo, Integer iRoomFrom, String szView)
  {
   ROOMTO_ID = iRoomTo;
   ROOMFROM_ID = iRoomFrom;
   DOOR_VIEW = szView;
  }
  
  public final Integer ROOMFROM_ID;
  public final Integer ROOMTO_ID;
  public final String DOOR_VIEW;
 }
 public void Render()
 {
  for(int i=0; i<m_vpRoomID.size(); i++)
  {
   Room pRoom = null;
   pRoom = m_vpRoomID.get(i);
   System.out.println(pRoom.ROOM_VIEW+"("+pRoom.ROOM_ID+")");
   pRoom = null;
  }
  for(int i=0; i<m_vpDoorID.size(); i++)
  {
   Door pDoor = null;
   pDoor = m_vpDoorID.get(i);
   System.out.println(pDoor.DOOR_VIEW+"("+pDoor.ROOMFROM_ID+"->"+pDoor.ROOMTO_ID+")");
   pDoor = null;
  }
 }
 @SuppressWarnings("finally")
 public boolean Init()
 {
  boolean bRet = false;
  try
  {
   Clear();
   m_vpDoorID = new ArrayList<Door>();
   m_vpRoomID = new ArrayList<Room>();
   bRet = true;
  }
  catch( Exception e)
  {
   throw e;
  }
        finally
        {
            return bRet;
        }
 }
 public void Clear()
 {
  if( null != m_vpRoomID)
  {
   m_vpRoomID.clear();
   m_vpRoomID = null;
  }
  if( null != m_vpDoorID)
  {
   m_vpDoorID.clear();
   m_vpDoorID = null;
  }
 }
 public ArrayList<Room> m_vpRoomID = null;
 public ArrayList<Door> m_vpDoorID = null;
}

abstract class HomeBuilder
{
 @SuppressWarnings("finally")
 public boolean Init_CreateHome()
 {
  if( null != m_pHome)
  {
   m_pHome.Clear();
   m_pHome = null;
  }
  boolean bRet = false;
  try
  {
   m_pHome = new Home();
   bRet = m_pHome.Init();
  }
  catch( Exception e)
  {
   throw e;
  }
        finally
        {
            return bRet;
        }
 }
 public Home UnInit_GetHome()
 {
  Home pRet = m_pHome;
  m_pHome = null;
  return pRet;
 }
 public abstract void BuildRoom(Integer iID);
 public abstract void BuildDoor(Integer iRoomTo, Integer iRoomFrom);
 protected HomeBuilder()
 { 
 }
 protected Home m_pHome = null;
}

class CartoonBuilder extends HomeBuilder
{
 @Override
 public void BuildDoor(Integer iRoomTo, Integer iRoomFrom)
 {
  // TODO Auto-generated method stub
  Home.Door pDoor = new Home.Door(iRoomTo,iRoomFrom,"Cartoon");
  m_pHome.m_vpDoorID.add(pDoor);
  pDoor = null;
 }
 @Override
 public void BuildRoom(Integer iID)
 {
  // TODO Auto-generated method stub
  Home.Room pRoom = new Home.Room(iID,"Cartoon");
  m_pHome.m_vpRoomID.add(pRoom);
  pRoom = null;
 }
}

class ScienceBuilder extends HomeBuilder
{
 @Override
 public void BuildDoor(Integer iRoomTo, Integer iRoomFrom)
 {
  // TODO Auto-generated method stub
  Home.Door pDoor = new Home.Door(iRoomTo,iRoomFrom,"Science");
  m_pHome.m_vpDoorID.add(pDoor);
  pDoor = null;
 }
 @Override
 public void BuildRoom(Integer iID)
 {
  // TODO Auto-generated method stub
  Home.Room pRoom = new Home.Room(iID,"Science");
  m_pHome.m_vpRoomID.add(pRoom);
  pRoom = null;
 }
}

class MyHome
{
 public void CreateHome(HomeBuilder pHomeBuilder)
 {
  if( null != m_pMyHome)
  {
   m_pMyHome.Clear();
   m_pMyHome = null;
  }
  
  if( pHomeBuilder.Init_CreateHome())
  {
   pHomeBuilder.BuildRoom(0);
   pHomeBuilder.BuildRoom(1);
   pHomeBuilder.BuildDoor(1, 0);
   m_pMyHome = pHomeBuilder.UnInit_GetHome();
  }
 }
 public void Render()
 {
  if( null != m_pMyHome)
  {
   m_pMyHome.Render();
  }
 }
 
 private Home m_pMyHome = null;
}

 

 

//---------------------------------------------------

class BuilderClient
{
 public static void Client()
 {
  MyHome pMyHome = new MyHome();
  
  HomeBuilder pCartoonBuilder = new CartoonBuilder();
  pMyHome.CreateHome(pCartoonBuilder);
  pCartoonBuilder = null;
  pMyHome.Render();
  
  HomeBuilder pScienceBuilder = new ScienceBuilder();
  pMyHome.CreateHome(pScienceBuilder);
  pScienceBuilder = null;
  pMyHome.Render();
  
  pMyHome = null;
 }
}