设计模式-外观模式

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397)

目录

定义

特点

使用场景

优缺点

[(1) 优点](#(1) 优点)

[(2) 缺点](#(2) 缺点)

模式结构

具体实现

实际应用

定义

外观模式(Facade Pattern)又叫作门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

特点

向现有的系统添加一个接口,来隐藏系统的复杂性。

使用场景

    • 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
    • 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
    • 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。

优缺点

(1) 优点
    • 减少系统相互依赖。
    • 提高灵活性。
    • 提高了安全性。
(2) 缺点
    • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

模式结构

外观(Facade)模式包含以下主要角色。

    • 外观(Facade)角色:为多个子系统对外提供一个共同的接口。
    • 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。
    • 客户(Client)角色:通过一个外观角色访问各个子系统的功能。

具体实现

抽象类和具体实现类

复制代码
/**
 * 形状接口
 */
public interface Shape {

    /**
     * 绘制
     */
    void draw();
}

/**
 * 圆形
 */
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("draw circle begin...");
    }
}

/**
 * 矩形
 */
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("draw rectangle begin...");
    }
}

外观类

复制代码
/**
 * 外观类
 */
public class ShapeMaker {
    private Shape circle;
    private Shape rectangle;

    public ShapeMaker() {
        circle = new Circle();
        rectangle = new Rectangle();
    }

    /**
     * 绘制圆形
     */
    public void drawCircle() {
        circle.draw();
    }

    /**
     * 绘制矩形
     */
    public void drawRectangle() {
        rectangle.draw();
    }

    /**
     * 绘制所有形状
     */
    public void drawAll() {
        drawCircle();
        drawRectangle();
    }
}

具体使用

复制代码
public class App {
    public static void main(String[] args) {
        ShapeMaker shapeMaker = new ShapeMaker();

        shapeMaker.drawCircle();
        shapeMaker.drawRectangle();

        shapeMaker.drawAll();
    }
}

实际应用

1、常用功能、SDK封装

2、常用框架等接口的暴露。

相关推荐
XiaoFan01219 小时前
免密批量抓取日志并集中输出
java·linux·服务器
顾北1219 小时前
MCP服务端开发:图片搜索助力旅游计划
java·spring boot·dubbo
我命由我1234519 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
赛姐在努力.19 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
yxc_inspire19 小时前
Java学习第二天
java·面向对象
毕设源码-赖学姐19 小时前
【开题答辩全过程】以 基于net超市销售管理系统为例,包含答辩的问题和答案
java
昀贝19 小时前
IDEA启动SpringBoot项目时报错:命令行过长
java·spring boot·intellij-idea
roman_日积跬步-终至千里20 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦20 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli720 小时前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源