设计模式-外观(门面)模式(结构型)

ops/2024/10/17 5:25:54/

外观模式

外观模式又称门面模式(结构型模式),它是一个可以屏蔽系统复杂性的设计模式。俗话说没有什么问题是加一层“介质”解决不了的,如果有那就在加一层。在开发过程中肯定封装过Utils类,我认为这就是一种门面模式;与之类似的还有一种模式叫中介者模式(又叫调停者模式),它是用于解决”内部问题"的,即系统内多个类直接问题的;

角色

  1. 门面类:提供一些接口,封装系统的复杂性,客户端可以通过与门面类对象的交互,而无需直接与系统的各个组件打交道。
  2. 子系统:多个相互关联的类组成,负责具体的功能,外观对象通过调用子系统的来完成客户端请求。
  3. 客户端:直接与门面类交互,不需要了解子系统内部具体实现。

图解

请添加图片描述

实现

子系统:

涉及到A、B、C三个类,都实现Base抽象类

public interface Base {String test();
}
public class A implements Base{@Overridepublic String test() {return "A";}
}
public class B implements Base{@Overridepublic String test() {return "B";}
}
public class C implements Base{@Overridepublic String test() {return "C";}
}

门面类:

定义子系统内部所有类的引用,并封装其方法

public class Facade {private A a;private B b;private C c;public Facade() {this.a = new A();this.b = new B();this.c = new C();}public void funA(){System.out.println(a.test());}public void funAB(){System.out.println(a.test()+b.test());}public void funABC(){System.out.println(a.test()+b.test()+c.test());}
}

客户端:

创建门面对象,调用子系统内部接口

public class Client {public static void main(String[] args) {Facade facade = new Facade();facade.funA();}
}

http://www.ppmy.cn/ops/48037.html

相关文章

独享IP VS 原生IP,二者的区别与定义详解

原生IP:原生IP是指由Internet服务提供商(ISP)直接分配给用户的IP地址,这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址,与用户的物理位置直接相关。在跨境电商中&…

HiveMetastore

HiveMetastore 背后的存储 select * from DBS; select * from TBLS; select * from TABLE_PARAMS; 查找出没有 totalSize stats 的table SELECT DBS.NAME,t.TBL_NAME from DBS inner join (select DB_ID,TBL_NAME from TBLS where TBLS.TBL_ID not in(select TBL_ID from T…

UI框架与MVC模式详解(1)——逻辑与数据分离

【效率最高的耦合方式】 以实际的例子来说明,更容易理解些。 这里从上到下,从左到右共有8个显示项,如果只需要显示这8个,不会做任何改变,数据固定,那么我们只需要最常规的思路去写就好,这是最…

新规:互联网政务应用安全管理规定将于7月1日正式执行

随着互联网技术的快速发展,政务服务也逐渐向数字化、智能化、便捷化转型。为了保障互联网政务应用的安全,保障公民信息不被泄露,为了让大家放心,我国政府出台了互联网政务应用安全管理规定。此规定将于24年7月1日正式执行。 1、规…

美团强势领涨恒指,港股即将迎来触底反弹?

恒指早间低开低走,持续低位徘徊,一度试探万八关口,最低见17994点,市场情绪表现疲弱,大型科技股普遍走低,但主要指数午后回升,恒生科技指数率先转涨,美团(3690.HK)涨超4%领涨成分股&a…

利用Redis的队列模式实现消息的发送和订阅,适合分布式场景,Java实现代码

在Redis中,通常使用发布/订阅模式(Pub/Sub)来进行消息的实时通信。然而,标准的Redis发布/订阅模式并不直接支持确保一条消息只被一台机器消费。在这种模式下,所有订阅了特定频道的客户端都会收到发布的消息。 但是&…

Flex布局属性

Flex布局,即Flexible Box布局,是为了提供一种更加有效的方式来布局、对齐和分布在容器中的项目,即使它们的大小未知或是动态变化的。Flex布局非常适合应用于响应式设计。 以下是一些Flex布局的基本概念和属性: Flex容器属性&…

SpringBoot整合Skywalking

下载Java Agent 官网:https://skywalking.apache.org/downloads/ 提示:Agent最好到网上找一找之前的版本,新版本可能有bug,如果出现了并且网上也几乎没有这个版本的解决方法那么就切换之前的版本 本地启动时 -javaagent:d:\opt\…