ICode9

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

设计模式之“外观模式(门面模式)(Facade)”

2022-09-15 18:02:39  阅读:214  来源: 互联网

标签:外观 void 模式 public facade Facade 设计模式 子系统


一.外观模式

1.概念

  • 为子系统中的一组接口提供一个一致的界面
  • 此模式定义了一个高层接口
  • 这个接口使得这一子系统更加容易使用
  • 他完美的体现了依赖倒转原则和迪米特法则的思想,是常用模式之一

2.何时使用

  • 首先在设计初期阶段,应该要有意识的将不同的两个层分离(如:经典的三层架构)

    • 经典的三层架构
      • 就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与逻辑层之间建立外观模式(Facade)

      • 这样可以为复杂的子系统提供一个简单的接口,使得耦合性大大降低
  • 其次,在开发阶段,子系统往往因为不断的重构演化而变得原来越复杂

    • 大多数的模式使用时也都会残生很多很小的类
    • 会给外部调用他们的用户程序带来了使用上的困难
    • 增加外观Facade类,可以提供一个简单的接口,减少他们之间的依赖

  • 再则,维护一个遗留的大型系统时,可能这个系统已经非常难维护和扩展了

    • 因为它包含非常重要的功能,新的需求开发必须要依赖于它。
    • 此时用外观模式Facade也非常适合
    • 你可以为新系统开发一个外观Facade类

    • 来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口

    • 让新系统与Facade对象交互,Facade与遗留代码交换所有复杂的工作

 

 

二.结构图

 

三.案例

1.测试类

package com.facadePatterns.facade;

/**
 * 测试外观模板
 *
 * @author 王子威
 * @date 2022/9/15
 */
public class TestFacade
{
    public static void main(String[] args)
    {
        // 生成外观类
        Facade facade = new Facade();
        // 外观模板A
        facade.mathodA();
    }
}

 

2.外观类

package com.facadePatterns.facade;

/**
 * 外观类【外观模板】
 *
 * @author 王子威
 * @date 2022/9/15
 */
public class Facade
{
    SubSystemOne subSystemOne;
    SubSystemTwo subSystemTwo;
    SubSystemThree subSystemThree;
    SubSystemFour subSystemFour;

    /**
     * 初始化各个子系统类
     */
    public Facade()
    {
        this.subSystemOne = new SubSystemOne();
        this.subSystemTwo = new SubSystemTwo();
        this.subSystemThree = new SubSystemThree();
        this.subSystemFour = new SubSystemFour();
    }

    /**
     * 外观模板A
     */
    public void mathodA()
    {
        subSystemOne.methodOne();
        subSystemTwo.methodTwo();
        subSystemThree.methodThree();
        subSystemFour.methodFour();
    }
}

 

3.子系统一

package com.facadePatterns.facade;

/**
 * 子系统类一
 *
 * @author 王子威
 * @date 2022/9/15
 */
public class SubSystemOne
{
    public void methodOne()
    {
        System.out.println("子系统类一方法一");
    }
}

 

4.子系统二

package com.facadePatterns.facade;

/**
 * 子系统类二
 *
 * @author 王子威
 * @date 2022/9/15
 */
public class SubSystemTwo
{
    public void methodTwo()
    {
        System.out.println("子系统类二方法二");
    }
}

 

5.子系统三

package com.facadePatterns.facade;

/**
 * 子系统类三
 *
 * @author 王子威
 * @date 2022/9/15
 */
public class SubSystemThree
{
    public void methodThree()
    {
        System.out.println("子系统类三方法三");
    }
}

 

6.子系统四

package com.facadePatterns.facade;

/**
 * 子系统类四
 *
 * @author 王子威
 * @date 2022/9/15
 */
public class SubSystemFour
{
    public void methodFour()
    {
        System.out.println("子系统类四方法四");
    }
}

 

7.结果图

 

标签:外观,void,模式,public,facade,Facade,设计模式,子系统
来源: https://www.cnblogs.com/saoge/p/16697472.html

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

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

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

ICode9版权所有