设计模式-外观模式

作者持续关注 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、常用框架等接口的暴露。

相关推荐
qfljg18 分钟前
OpenRewrite 实战指南
java
Sylvia33.23 分钟前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
2601_962071576 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww89491116 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
zww89491119 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
黑马程序员毕设10 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳10 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
白山编程大哥10 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
devpotato11 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
xcl092511 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·spring boot·需求分析