好素材网站,汝城县网站建设公司,站长统计app,wordpress 文章页面显示全部一、外观模式 概述 外观模式#xff08;Facade Pattern#xff09;隐藏系统的复杂性#xff0c;并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式#xff0c;它向现有的系统添加一个接口#xff0c;来隐藏系统的复杂性
这种模式涉及到一…一、外观模式 概述 外观模式Facade Pattern隐藏系统的复杂性并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式它向现有的系统添加一个接口来隐藏系统的复杂性
这种模式涉及到一个单一的类该类提供了客户端请求的简化方法和对现有系统类方法的委托调用
主要解决
降低访问复杂系统的内部子系统时的复杂度简化客户端之间的接口
何时使用
1、客户端不需要知道系统内部的复杂联系整个系统只需提供一个接待员即可
2、定义系统的入口 优缺点 优点
减少系统相互依赖提高灵活性提高了安全性
缺点
不符合开闭原则如果要改东西很麻烦继承重写都不合适
1. 各个角色介绍
1.1 外观Facade
提供一个简化的接口封装了系统的复杂性。外观模式的客户端通过与外观对象交互而无需直接与系统的各个组件打交道
1.2 子系统Subsystem
由多个相互关联的类组成负责系统的具体功能。外观对象通过调用这些子系统来完成客户端的请求
1.3 客户端Client
使用外观对象来与系统交互而不需要了解系统内部的具体实现
2. UML图
我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker。ShapeMaker 类使用实体类来代表用户对这些类的调用。Main 类使用 ShapeMaker 类来显示结果 3. 具体例子和代码 角色分配 Shape形状接口 Rectangle实现形状接口的长方形类Circle实现形状接口的圆形类Square实现形状接口的正方形 ShapeMaker外观类
3.1 抽象组件及其实现类
Shape
package com.vinjcent.prototype.decorator;/*** author vinjcent* description 形状接口* since 2024/3/15 16:23*/
public interface Shape {/*** 形状绘制动作*/void draw();}
Rectangle
package com.vinjcent.prototype.facade;/*** author vinjcent* description 长方形* since 2024/3/20 16:32*/
public class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Rectangle::draw());}}
Circle
package com.vinjcent.prototype.facade;/*** author vinjcent* description 圆形* since 2024/3/20 16:36*/
public class Circle implements Shape {Overridepublic void draw() {System.out.println(Circle::draw());}}
Square
package com.vinjcent.prototype.facade;/*** author vinjcent* description 正方形* since 2024/3/20 16:34*/
public class Square implements Shape {Overridepublic void draw() {System.out.println(Square::draw());}}
3.2 外观类
ShapeMaker
package com.vinjcent.prototype.facade;import io.swagger.annotations.ApiModelProperty;/*** author vinjcent* description 外观类* since 2024/3/20 16:35*/
public class ShapeMaker {ApiModelProperty(圆形)private final Shape circle;ApiModelProperty(长方形)private final Shape rectangle;ApiModelProperty(正方形)private final Shape square;public ShapeMaker() {circle new Circle();rectangle new Rectangle();square new Square();}public void drawCircle() {circle.draw();}public void drawRectangle() {rectangle.draw();}public void drawSquare() {square.draw();}}
3.3 测试主函数
package com.vinjcent.prototype.facade;/*** author vinjcent* description 外观模式* since 2024/3/20 16:38*/
public class Main {public static void main(String[] args) {// 创建一个外观类ShapeMaker shapeMaker new ShapeMaker();// 绘制圆形shapeMaker.drawCircle();// 绘制长方形shapeMaker.drawRectangle();// 绘制正方形shapeMaker.drawSquare();}}
测试结果 4. 使用场景
为复杂的模块或子系统提供外界访问的模块子系统相对独立预防低水平人员带来的风险