一对一免费咨询: 18215660330

立面是“四人一组”设计模式的一部分,并且被归类为“结构设计”模式。在深入研究它的细节之前,让我们讨论一些将通过此特定模式解决的示例。

因此,顾名思义,它意味着建筑物的外观。走过马路的人只能看到建筑物的玻璃表面。他们对此一无所知,对布线,管道和其他复杂性一无所知。它掩盖了建筑物的所有复杂性,并显示出友好的面孔。

更多例子

在Java中,JDBC接口可以称为Facade,因为我们作为用户或客户端使用“ java.sql.Connection”接口创建连接,我们不关心其实现。实施留给驱动程序的供应商。

另一个很好的例子是计算机的启动。当计算机启动时,它涉及到cpu,内存,硬盘驱动器等工作。为了使用户易于使用,我们可以添加外观来包装任务的复杂性,并提供一个简单的界面。
这同样适用于外观设计模式。它隐藏了系统的复杂性,并提供了到客户端的接口,客户端可以从中访问系统。

立面设计模式图

现在,让我们使用一个简单的示例来尝试更好地理解外观模式。让我们考虑一家酒店。这家酒店设有酒店管理员。酒店内有很多餐厅,例如Veg餐厅,Non-Veg餐厅和Veg / Non Both餐厅。
您作为客户想要访问不同餐厅的不同菜单。您不知道它们有哪些不同的菜单。您只需要与非常了解他的酒店的酒店老板联系即可。无论您要哪种菜单,您都可以告诉酒店老板,他会从相应的餐厅中拿出菜单并将其交给您。在这里,酒店管理员充当了门面,因为他隐藏了系统酒店的复杂性。
让我们看看它是如何工作的:

酒店界面

filter_none
brightness_4
package structural.facade;
public interface Hotel
{
public Menus getMenus();
}
酒店界面仅返回菜单。
同样,餐厅有三种类型,可以实现酒店界面。让我们看一下其中一家餐厅的代码。

NonVegRestaurant.java

filter_none
brightness_4
package structural.facade;

public class NonVegRestaurant implements Hotel
{
public Menus getMenus()
{
NonVegMenu nv = new NonVegMenu();
return nv;
}
}
VegRestaurant.java

filter_none
brightness_4
package structural.facade;

public class VegRestaurant implements Hotel
{
public Menus getMenus()
{
VegMenu v = new VegMenu();
return v;
}
}
VegNonBothRestaurant.java

filter_none
brightness_4
package structural.facade;

public class VegNonBothRestaurant implements Hotel
{
public Menus getMenus()
{
Both b = new Both();
return b;
}
}
现在让我们考虑一下立面

HotelKeeper.java

filter_none
brightness_4
package structural.facade;

public class HotelKeeper
{
public VegMenu getVegMenu()
{
VegRestaurant v = new VegRestaurant();
VegMenu vegMenu = (VegMenu)v.getMenus();
return vegMenu;
}

public NonVegMenu getNonVegMenu()
{
NonVegRestaurant v = new NonVegRestaurant();
NonVegMenu NonvegMenu = (NonVegMenu)v.getMenus();
return NonvegMenu;
}

public Both getVegNonMenu()
{
VegNonBothRestaurant v = new VegNonBothRestaurant();
Both bothMenu = (Both)v.getMenus();
return bothMenu;
}
}
由此看来,很明显,复杂的实现将由HotelKeeper自己完成。客户将仅访问HotelKeeper,并询问Veg,NonVeg或VegNon Both餐厅菜单。

客户端程序将如何访问此外观?

filter_none
brightness_4
package structural.facade;

public class Client
{
public static void main (String[] args)
{
HotelKeeper keeper = new HotelKeeper();

VegMenu v = keeper.getVegMenu();
NonVegMenu nv = keeper.getNonVegMenu();
Both = keeper.getVegNonMenu();

}
}
这样,将实现发送到立面。客户端仅获得一个接口,并且只能访问该接口。这掩盖了所有复杂性。

什么时候应该使用这种模式?

当您有一个复杂的系统要以简化的方式向客户端公开,或者要在与该系统不兼容的现有系统上建立外部通信层时,外观模式是合适的。Facade处理接口而不是实现。其目的是将内部复杂性隐藏在单个接口中,而该接口在外部看起来很简单。

成都软件开发 最好的成都软件定制开发公司
18215660330