一.外观模式

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.结果图

设计模式之“外观模式(门面模式)(Facade)”的更多相关文章

  1. 设计模式之——外观or门面模式

    1.概念 定义一个高层的统一的外观接口类,该接口用于客户端调用,和一个实现类用来包装子系统中多个类,客户端可以通过客户端完成对子系统的方法调用. 2.适用场景 2.1 代码移植,降低了现有系统的复杂度 ...

  2. 外观模式 门面模式 Facade 结构型 设计模式(十三)

    外观模式(FACADE) 又称为门面模式   意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统 ...

  3. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用

    在C#中实现的基于外观或门面模式打造的业务应用案例 以前一直没有想过写一些东西来把项目中用到的知识点及技术实现做一个归纳整理并分享出来.现在打算逐渐的把项目中的一些东西整理并分享出来,与大家共勉! 外 ...

  4. 设计模式 | 外观模式/门面模式(facade)

    定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 结构:(书中图,侵删) 一个简洁易用的外观类 一个复杂的子系统   实例: 书中提到了理 ...

  5. java设计模式——外观模式(门面模式)

    一. 定义与类型 定义:门面模式,提供一个统一的接口,用来访问子系统中的一群接口,门面模式定义了一个高层接口,让子系统更容易使用 类型:结构性 二. 使用场景 子系统越来越复杂,增加外观模式提供简单调 ...

  6. 开发设计模式(九)门面模式(Facade Pattern)

    什么是门面模式? 门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 大家都写过纸质的信件吧,比如给女朋友写 ...

  7. JAVA设计模式——第 7 章 门面模式【Facade Pattern】(转)

    好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较 ...

  8. IOS设计模式之二(门面模式,装饰器模式)

    本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...

  9. java设计模式----外观模式(门面模式)

    外观模式主要应用场景在于为复杂的子系统提供一个简单的接口,提高子系统的独立性. 创建DrawerOne类: package facade; public class DrawerOne { publi ...

  10. python设计模式---结构型之门面模式

    门面,系统,客户端~ from django.test import TestCase class Hotelier: def __init__(self): print('Arranging the ...

随机推荐

  1. .NET程序员AI开发基座:Microsoft.Extensions.AI

    大家好,我是Edison. 微软在2024年11月就发布了新的AI核心库Microsoft.Extensions.AI,虽然目前还是一个预览版,但其可以大大简化我们的AI集成和开发工作. Micros ...

  2. 使用crewai创建属于你自己的AI团队

    crewai介绍 CrewAI 是一个用于协调自主 AI 代理的前沿框架. CrewAI 允许你创建 AI 团队,其中每个代理都有特定的角色.工具和目标,协同工作以完成复杂任务. 把它想象成组建你的梦 ...

  3. [BZOJ4605] 崂山白花蛇草水 题解

    突然想买一瓶,然后喝上几口.(不要命的想法) 动态全局 \(k\) 大想到权值线段树上二分. 由于要存储二维的点,所以得用到我们神通广大的 \(KDT\) 了. 那么想到权值线段树套 \(KDT\) ...

  4. [luogu1248] 加工生产调度 题解

    考虑 \(i\) 排在 \(j\) 前的条件是 \(a_i+\max(a_j,b_i)+b_j\le a_j+\max(a_i,b_j)+b_i\),然后发现这一坨东西是皇后游戏中的倒数第三个式子,直 ...

  5. js中的模糊搜索( 正则表达式)

    此案例在vue中实现 搜索设备ID示例 <input type="text" name="" placeholder="搜索设备ID" ...

  6. 保持Android Service在手机休眠后继续运行的方法

    保持Android Service在手机休眠后继续运行的方法   下面小编就为大家分享一篇保持Android Service在手机休眠后继续运行的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随 ...

  7. C# Web下的类库 项目中获取程序的运行路径

    System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase

  8. Flink - [07] 容错机制

    题记部分 一.一致性检查点   Flink故障恢复机制的核心,就是应用状态的一致性检查点.有状态流应用的一致性检查点,其实就是所有任务的状态,在某个时间点的一份拷贝(一份快照):这个时间点,应该是所有 ...

  9. 「四」vim执行外部命令、文件另存为、文件提取合并、打开类命令、光标后插入内容、替換、复制粘贴、查找设置

    vim执行外部命令 查看当前目录文件::! command 另存为 完整内容: :w filename 选择性内容: v:选择内容. :w filename 文件提取合并 向当前文件插入文件内容: : ...

  10. 【Matlab】求解复合材料层合板刚度矩阵及柔度矩阵

    1. matlab文件结构 2. main.m代码 clc clear; warning off; %% %铺层角度数组 angles=[0 90 0]; % ° %单层厚度 ply_thicknes ...