外观模式(门面模式)
作者:互联网
Facade Patterns
GoF定义:将系统中的一系列接口放到一个接口当中,这个高层级的接口是为了让子系统使用更方便
概念
这是松耦合模式中的一种,这里主要分析它的抽象结构,通过暴露一个简单接口,来隐藏复杂的细节
例子
现实世界:假如你举办一个生日聚会,那么你可以找一个聚会组织者,告诉他聚会的详情,那么他去通知其它参加聚会的人的过程是你所不需要关心的
代码世界:调用一个库的方法,不需要关心它内部的实现
展示
UML图中,用户要制造一个机器人,只需要提供颜色和原料信息,具体怎么造(初始化机器人部件的各种对象)的细节无需关心。为了提高可读性,将机器人组件类和门面类分在不同的包中
代码
public class FacadePatternEx
{
public static void main(String[] args)
{
System.out.println("***Facade Pattern Demo***");
RobotFacade rf1 = new RobotFacade();
rf1.createRobot("Green", "Iron");
RobotFacade rf2 = new RobotFacade();
rf2.createRobot("Blue", "Steel");
}
}
class RobotFacade
{
private RobotBody body;
private RobotColor color;
private RobotMetal metal;
public RobotFacade()
{
this.body = new RobotBody();
this.color = new RobotColor();
this.metal = new RobotMetal();
}
public void createRobot(String color, String metal)
{
System.out.println("\nCreation of the Robot Start");
this.color.setColor(color);
this.metal.setMetal(metal);
this.body.createBody();
System.out.println("\nRobot Creation End"); System.out.println();
}
}
class RobotBody
{
public void createBody()
{
System.out.println("\nBody Creation done");
}
}
class RobotColor
{
private String color;
public void setColor(String color)
{
this.color = color;
}
}
class RobotMetal
{
private String metal;
public void setMetal(String metal)
{
this.metal = metal;
}
}
Note
- 使用门面模式只是想要一个简单的接口而不是一个子系统
- 这里提高了系统的耦合性,所以这个接口需要是相对独立的
- 这里门面接口减少了用户需要直接操作的对象数目
- 没有什么主要缺点,在jQuery中应用很多
思考
这个模式并不复杂,个人认为如果使用这个模式且不增加系统的耦合性,那么这个接口包含的接口(类)必须要是功能紧密相关的,此时无论功能类如何改动,也并不十分影响门面接口的使用(只要这个功能的方法变化不是特别大)
标签:外观,String,color,metal,RobotFacade,接口,模式,门面,public 来源: https://www.cnblogs.com/mouseGo/p/14077157.html