Java设计模式 _结构型模式_外观模式

一、外观模式

1、外观模式
外观模式(Facade Pattern)是一种结构型模式。主要特点为隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这有助于降低系统的复杂性,提高可维护性。当客户端与多个子系统之间存在大量的交互时,有助于减少客户端与子系统之间的耦合,提高系统的可扩展性。同时保护了子系统的内部实现,提高系统的安全性。

2、实现思路
(1)、创建一个统一接口,并完成各种实现类的编写;
(2)、编写外观类,将各种实现类都内置为外观类的成员变量;
(3)、在外观类中,通过构造方法或者自定义方法,去创建成员变量的实例。
(4)、定义外观需要的各种方法,可以是调用某一个实现类的方法,或者是组合多个实现类的方法。

二、代码示例

1、代码示例
通过形状的超市去获取各种形状,而不是通过每一个形状的实例去获取。

// 1、定义形状的抽象接口
public interface Shape {public void draw();
}
// 2.1、定义绘制圆形的方法
public class CircleShape implements Shape {@Overridepublic void draw() {System.out.println("绘制圆形");}
}
// 2.2、定义绘制正方形的方法
public class SquareShape implements Shape {@Overridepublic void draw() {System.out.println("绘制正方形");}
}
// 2.3、定义绘制三角形的方法
public class TriangleShape implements Shape {@Overridepublic void draw() {System.out.println("绘制三角形");}
}
// 3、定义外观类,形状市场
public class ShapeMarket {private Shape circleShape;private Shape squareShape;private Shape triangleShape;public ShapeMarket(){this.circleShape = new CircleShape();this.squareShape = new SquareShape();this.triangleShape = new TriangleShape();}// 绘制圆形外观方法public void drawCircle(){this.circleShape.draw();}// 绘制正方形外观方法public void drawSquare(){this.squareShape.draw();}// 绘制三角形外观方法public void drawTriangle(){this.triangleShape.draw();}// 通过组合--生成绘制多个图形的外观方法public void drawAll(){this.circleShape.draw();this.squareShape.draw();this.triangleShape.draw();}
}
// 4、测试类,通过市场来绘制图形
public static void main(String[] args) {ShapeMarket market = new ShapeMarket();System.out.println("**********");market.drawCircle();  // 用外观类画圆System.out.println("");System.out.println("**********");market.drawSquare();  // 用外观类画正方形System.out.println("");System.out.println("**********");market.drawTriangle();  // 用外观类画三角形System.out.println("");System.out.println("**********");market.drawAll();  // 用外观类绘制多个图形}

运行结果:
在这里插入图片描述
总结:
外观模式的套路,就是将多个相关业务的类都放在一个类中,作为属性成员去管理。之后根据业务需要定义的各种对外的方法,而在这些方法中真正起作用还是通过直接或者组合调用成员方法去实现的。

学海无涯苦作舟!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

46. UE5 RPG 增加角色受击反馈

在前面的文章中,我们实现了对敌人的属性的初始化,现在敌人也拥有的自己的属性值,技能击中敌人后,也能够实现血量的减少。 现在还需要的就是在技能击中敌人后,需要敌人进行一些击中反馈,比如敌人被技能击中后…

社交新时代:Facebook如何塑造我们的互动方式

在当今社交媒体充斥着人们日常生活的情况下,Facebook作为影响力最大的社交平台之一,已经深深地影响了我们的互动方式和社交行为。从初期的大学校园社交网络发展到如今的全球社交巨头,Facebook已经成为许多人日常生活中不可或缺的组成部分。本…

学习大数据,所需更要的shell基础(2)

文章目录 read读取控制台输入函数系统函数bashnamedirname 自定义函数Shell工具(重点)cutawk 正则表达式入门常规匹配常用特殊字符 read读取控制台输入 1)基本语法 read (选项) (参数) ①选项: -p:指定读取值时的提示…

补强板大全

一.名词介绍: 补强板又叫Stiffeners,加强板,增强板,支撑板,保强板,裙托板,撑托板,托强板,加强筋。补强板主要用在建筑,石油管道,机工设…

STL 总结

STL 在 C 标准模板库(STL)中,主要包含了一系列的容器、迭代器、算法、函数对象、适配器。 容器 容器是用于存储数据的类模板。STL 容器可以分为序列型容器、关联型容器和链表型容器三类:序列型容器:vector、deque、…

网工路由基础——静态路由

一、静态路由的定义 静态路由是一种需要管理员手动配置的特殊路由。 二、静态路由的目的或背景 1)当网络结构比较简单时,只需要配置静态路由就可以使网络正常工作; 2)在复杂网络中,配置静态路由可以改进网络的性能&am…

智能BI(后端)-- 系统异步化

文章目录 系统问题分析什么是异步化?业务流程分析标准异步化的业务流程系统业务流程 线程池为什么需要线程池?线程池两种实现方式线程池的参数线程池的开发 项目异步化改造 系统问题分析 问题场景:调用的服务能力有限,或者接口的…

5月数学进度应该到哪里?听说24更难了,进度要加快吗?

刷一本习题册够吗?刷哪本?什么时候刷? 确实,24考完,大家都发现,没有一本习题册,覆盖了考试的所有知识点。 主流的模拟卷,都没有达到24卷的难度。 如何才能在最短的时间内&#xff…

LeetCode例题讲解:快乐数

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#xff0c…

Electron项目中将CommonJS改成使用ES 模块(ESM)语法preload.js加载报错

问题 将Electron项目原CommonJS语法改成使用ES 模块(ESM)语法,preload.js一直加载不到,报错如下: VM111 renderer_init:2 Unable to load preload script: D:\Vue\wnpm\electron\preload.js VM111 renderer_init:2 E…

地下管线管网三维参数化建模软件MagicPipe3D V3.5

经纬管网建模系统MagicPipe3D(www.magic3d.net)自主安全可控,本地离线参数化构建三维管网模型(管道、接头、附属物等),输出标准3DTiles、Obj等格式,支持Cesium、Unreal、Unity等引擎可视化查询分…

蓝桥杯EDA客观题

目录 前言 一、PCB类知识点和题目分析 1.电阻 2.电容 3.封装类 4.单位转换类 5.电路板结构类 6.PCB绘制规则 7.立创软件 8.PCB硬件 线性电源和开关电源 二、数电知识点和题目分析 1.门电路 2.逻辑代数 3.组合逻辑电路 4.触发器 5.时序逻辑电路 6.其他 三、模…