设计模式-外观模式

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

相关推荐
启山智软8 分钟前
【中大企业选择源码部署商城系统】
java·spring·商城开发
我真的是大笨蛋10 分钟前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怪兽源码38 分钟前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
恒悦sunsite44 分钟前
Redis之配置只读账号
java·redis·bootstrap
梦里小白龙1 小时前
java 通过Minio上传文件
java·开发语言
人道领域1 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
sheji52611 小时前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Java Web的电子商务网站的用户行为分析与个性化推荐系统为例,包含答辩的问题和答案
java·开发语言
摇滚侠1 小时前
Java项目教程《尚庭公寓》java项目从开发到部署,技术储备,MybatisPlus、MybatisX
java·开发语言
€8112 小时前
Java入门级教程24——Vert.x的学习
java·开发语言·学习·thymeleaf·数据库操作·vert.x的路由处理机制·datadex实战