门面模式(Facade):又称外观模式,其定义为:“外部与一个子系统的通信必须通过一个统一的门面对象进行”。其实可以理解为“一个子系统,只能对应一个具有单个实例的门面 类”。当然一个由多个子系统构成的大系统,可以有多个门面类;
系统类1
系统类2
系统类5
通过隐藏子系统组件,降低了客户处理的对象数量,以提升各个子系统的应用便捷性。
门面模式降低了子系统和客户端的耦合度,促进系统的可扩展性和可维护性;
门面模式通过层次化架构方式,可提升整个系统的稳定性。
应用场景
当设计者要求隐藏旧系统时,可以使用门面模式去实现;
如果子系统之间的依赖性较高,可以通过门面模式降低;
当子系统相当复杂时,可以通过门面模式提供简单的接口,以提高子系统的易用性和稳定性
门面模式结构:
子系统角色(subsystem):可以同时有一个或者多个系统,每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端调用,或者被门面角色调用。相对于子系统而言,门面相当于一个客户端而已。
实例:近期股市大涨,买卖股的人非常的多,而刚刚进入股市的人非常容易亏钱,这是基金应运而生,基金就是投资经理人把购买基金的钱拿去投资,然后大家获利。
而购买基金的人只需要知道基金的上涨还是下跌。
门面类
public class Fund
{
public Stock1 stc1;
public Stock2 stc2;
public Bond bond;
public NationalDebt nad;
public Realty ret;
public Fund()
{
stc1 = new Stock1();
stc2 = new Stock2();
bond = new Bond();
nad = new NationalDebt();
ret = new Realty();
}
public void buyFund();
{
stc1.buy();
stc2.buy();
bond.buy();
nad.buy();
ret.buy();
}
public void sellFund()
{
stc1.sell();
stc2.sell();
bond.sell();
nad.sell();
ret.sell();
}
}
系统类1
public class Stock1
{
public void buy()
{
System.out.println("buy stock1");
}
public void sell()
{
System.out.println("sell stock1");
}
}
系统类2
public class Stock2
{
public void buy()
{
System.out.println("buy Stock2");
}
public void sell()
{
System.out.println("sell Stock2");
}
}
系统类3public class Bond
{
public void buy()
{
System.out.println("buy Bond");
}
public void sell()
{
System.out.println("sell Bond");
}
}
系统类4public class NationalDebt
{
public void buy()
{
System.out.println("buy NationalDebt");
}
public void sell()
{
System.out.println("sell NationalDebt");
}
}
系统类5
public class Realty
{
public void buy()
{
System.out.println("buy Realty");
}
public void sell()
{
System.out.println("sell Realty");
}
}
测试类public class testFacade
{
public static void main(String[] args)
{
Fund jijin = new Fund();
jijin.buyFund();
jijin.sellFund();
}
}
优势通过隐藏子系统组件,降低了客户处理的对象数量,以提升各个子系统的应用便捷性。
门面模式降低了子系统和客户端的耦合度,促进系统的可扩展性和可维护性;
门面模式通过层次化架构方式,可提升整个系统的稳定性。
应用场景
当设计者要求隐藏旧系统时,可以使用门面模式去实现;
如果子系统之间的依赖性较高,可以通过门面模式降低;
当子系统相当复杂时,可以通过门面模式提供简单的接口,以提高子系统的易用性和稳定性