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;
}
}