设计模式-外观模式

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

相关推荐
Mryan20053 分钟前
解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution
java·开发语言·spring boot·maven
VX_CXsjNo113 分钟前
免费送源码:Java+SSM+Android Studio 基于Android Studio游戏搜索app的设计与实现 计算机毕业设计原创定制
java·spring boot·spring·游戏·eclipse·android studio·android-studio
ylfhpy19 分钟前
Java面试黄金宝典33
java·开发语言·数据结构·面试·职场和发展·排序算法
乘风!36 分钟前
Java导出excel,表格插入pdf附件,以及实现过程中遇见的坑
java·pdf·excel
小小鸭程序员1 小时前
Vue组件化开发深度解析:Element UI与Ant Design Vue对比实践
java·vue.js·spring·ui·elementui
shuaixio1 小时前
【C++代码整洁之道】第九章 设计模式和习惯用法
c++·设计模式·设计原则·常见设计模式·习惯用法
南宫生1 小时前
Java迭代器【设计模式之迭代器模式】
java·学习·设计模式·kotlin·迭代器模式
seabirdssss2 小时前
通过动态获取项目的上下文路径来确保请求的 URL 兼容两种启动方式(IDEA 启动和 Tomcat 部署)下都能正确解析
java·okhttp·tomcat·intellij-idea
程序员小赵同学2 小时前
AI Agent设计模式二:Parallelization
开发语言·python·设计模式
千千寰宇2 小时前
[设计模式/Java] 设计模式之工厂方法模式【11】
设计模式