外观模式 - 结构

一、概述

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

 

二、使用

示例:

复制代码
package pattern.facade;

/**
 * @author zls
 * @date 2020/3/26
 */
public class FacadeTest {
    public static void main(String[] args) {
        CarMaker carMaker = new CarMaker();
        // 使用起来很简单,直接调用跑就行了,殊不知内部做了很多事情。
        carMaker.benzRun();
        carMaker.bmwRun();
    }
}

/**
 * 公共接口
 */
interface Car {
    void run();
}

/**
 * 大奔
 */
class Benz implements Car {
    @Override
    public void run() {
        System.out.println("大奔跑得快啊...");
    }
}

/**
 * 宝马
 */
class Bmw implements Car {
    @Override
    public void run() {
        System.out.println("宝马跑得稳...");
    }
}

/**
 * 外观类
 *      隐藏系统复杂性,提供统一的访问接口
 */
class CarMaker {
    private Car benz;
    private Car bmw;

    public CarMaker() {
        benz = new Benz();
        bmw = new Bmw();
    }

    /**
     * 隐藏系统的复杂性
     */
    public void benzRun() {
        // ... 也许很复杂,eg: 跑之前,要先环顾车一周,检查有没有人在车底(科三)
        benz.run();
        // ...  eg: 车没油了,跑不动了
    }

    /**
     * 隐藏系统的复杂性
     */
    public void bmwRun() {
        // ...如上
        bmw.run();
        // ...如上
    }
}
复制代码

 

 

 

参考:

https://www.runoob.com/design-pattern/facade-pattern.html

posted @   一帘幽梦&nn  阅读(109)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击查看具体代码内容
点击右上角即可分享
微信分享提示