ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

外观模式(门面模式)

2020-12-02 23:34:42  阅读:216  来源: 互联网

标签:外观 String color metal RobotFacade 接口 模式 门面 public


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有