8、门面模式(Facade)
- 门面角色(Facade): 供客户端调用,分派客户端的请求到子系统中去;此角色知晓相关的子系统的功能和责任;
- 子系统角色(SubSystem): 可以有一个或多个子系统;每个子系统都是一个类的集合
什么是门面角色?
门面模式要求一个子系统的外部和内部的通信必须通过一个统一的门面(Facade)进行。 门面模式提供一个高层次的接口,使得子系统易于使用。
在什么情况下使用门面模式?
- 为一个复杂子系统提供一个统一的接口
- 子系统的独立性
- 层次化结构
实例代码:
public class Facade
{
public Facade()
{
}
public void ProcessTitle()
{
StringOutput str = new StringOutput();
LineOutput line = new LineOutput();
SignalOutput sig = new SignalOutput();
line.doubleLine();
sig.sigRectangle();
str.StringOut("something here");
}
public void ProcessSubTitle()
{
StringOutput str = new StringOutput();
LineOutput line = new LineOutput();
SignalOutput sig = new SignalOutput();
line.singleLine();
sig.sigCircle();
str.StringOut("sub title 1.1");
}
public void ProcessItem()
{
StringOutput str = new StringOutput();
LineOutput line = new LineOutput();
SignalOutput sig = new SignalOutput();
sig.sigStar();
str.StringOut("process item");
}
}
public class LineOutput
{
public LineOutput()
{
}
public void singleLine()
{
System.out.println("------------------------------");
}
public void doubleLine()
{
System.out.println("==============================");
}
}
public class SignalOutput
{
public SignalOutput()
{
}
public void sigStar()
{
System.out.print("sigStar");
}
public void sigRectangle()
{
System.out.print("sigRect");
}
public void sigCircle()
{
System.out.print("?");
}
}
public class StringOutput
{
public StringOutput()
{
}
public void StringOut(String str)
{
System.out.println(str);
}
}
public class FacadeSample
{
static public void main(String args[])
{
Facade facade = new Facade();
facade.ProcessTitle();
facade.ProcessSubTitle();
facade.ProcessItem();
facade.ProcessItem();
facade.ProcessItem();
}
}