Facade 패턴은 서브시스템에 있는 인터페이스 집합에 대해 하나의 단순화된 통합 인터페이스를 제공하여
서브 시스템을 쉽게 사용하게 해준다.
//Faced인 MenuSite는 Client들에게 SubSystem에 다름과 같은 메소드를 제공한다.
public final class MenuSite
{
private static JFrame menuFrame = null;
private static JMenuBar menuBar = null;
public synchronized static void establish(JFrame container)
{
//구현된 코드
}
public static void addMenu( Object requester, String menuSpecifier )
{
createSubmenuByName( requester, menuSpecifier );
}
public static void removeMyMenus( Object requester )
{
//구현된 코드
}
public static void setEnable(Object requester, boolean enable)
{
//구현된 코드
}
public static JMenuItem getMyMenuItem(Object requester,
String menuSpecifier, String name)
{
//구현된 코드
}
public static void addLine( Object requester,
String toThisMenu,
String name,
ActionListener listener)
{
}
}
Clock이 Facede를 이용해서 MenuBar에 MenuItem을 추가하는 코드
public class Clock
{
private void createMenus()
{
// First set up a single listener that will handle all the
// menu-selection events except "Exit"
ActionListener modifier = //{=startSetup}
new ActionListener()
{ public void actionPerformed(ActionEvent e)
{
String name = ((JMenuItem)e.getSource()).getName();
char toDo = name.charAt(0);
if( toDo=='T' )
tick(); // single tick
else
startTicking( toDo=='A' ? 500: // agonizing
toDo=='S' ? 150: // slow
toDo=='M' ? 70 : // medium
toDo=='F' ? 30 : 0 ); // fast
}
};
// {=midSetup}
MenuSite.addLine(this,"Go","Halt", modifier);
MenuSite.addLine(this,"Go","Tick (Single Step)",modifier);
MenuSite.addLine(this,"Go","Agonizing", modifier);
MenuSite.addLine(this,"Go","Slow", modifier);
MenuSite.addLine(this,"Go","Medium", modifier);
MenuSite.addLine(this,"Go","Fast", modifier); // {=endSetup}
} //{=endCreateMenus}
}
Client ( Life, Clock, Neighborhood Class) 는 Facede(MenuSite)를 SubSystem에 객체지향적인 방식으로 접근할 수 있도록 한다.
- MenuSite는 자바 메뉴사이트(SubSystem)에 대한 Facede 이면, 메뉴 시스템을 단순화해 준다.
- 또한 공유된 메뉴바에 메뉴를 쉽게 추가 할 수 있도록 해준다.