其他分享
首页 > 其他分享> > 外观模式(门面模式)

外观模式(门面模式)

作者:互联网

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

  1. 使用门面模式只是想要一个简单的接口而不是一个子系统
  2. 这里提高了系统的耦合性,所以这个接口需要是相对独立的
  3. 这里门面接口减少了用户需要直接操作的对象数目
  4. 没有什么主要缺点,在jQuery中应用很多

思考

这个模式并不复杂,个人认为如果使用这个模式且不增加系统的耦合性,那么这个接口包含的接口(类)必须要是功能紧密相关的,此时无论功能类如何改动,也并不十分影响门面接口的使用(只要这个功能的方法变化不是特别大)

标签:外观,String,color,metal,RobotFacade,接口,模式,门面,public
来源: https://www.cnblogs.com/mouseGo/p/14077157.html