首页 > 其他分享 >设计模式-外观模式

设计模式-外观模式

时间:2024-06-08 20:30:20浏览次数:18  
标签:外观 需要 系统 模式 设计模式 子系统 客户端

什么是外观模式

      外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单统一的接口,用于访问复杂子系统中的一组接口。外观模式通过隐藏系统的复杂性,向客户端提供一个简化的接口,使得客户端更容易使用系统。它可以将一组复杂的类和子系统封装在一个外观类中,通过外观类来统一管理和调用这些类,简化客户端的调用过程。外观模式提供了一种解耦的方式,使得客户端不需要了解内部的子系统的具体实现细节,只需要通过外观类来与子系统进行交互。

外观模式应用场景

     外观模式是一种结构型模式,它提供了一个统一的接口,隐藏了底层子系统的复杂性,使得客户端能够更简单地使用这些子系统。

外观模式适用于以下场景:

  1. 当一个系统有多个子系统,而客户端需要与这些子系统进行交互时,可以使用外观模式来简化客户端的调用过程。

  2. 当子系统之间的依赖关系较为复杂时,可以使用外观模式将这些复杂的依赖关系封装起来,提供一个简单的接口给客户端使用。

  3. 当需要对子系统进行封装,隐藏其具体实现细节时,可以使用外观模式来实现。

  4. 当需要对原有的系统进行扩展,增加新的功能时,可以使用外观模式来实现对客户端的透明性。

代码示例

      假设有一个汽车启动系统,系统由多个子系统组成,包括点火系统、燃油系统和电池系统。客户端只需要通过外观类 CarFacade 来操作汽车启动,而不需要了解内部子系统的复杂性。

// 子系统 1: 点火系统
class IgnitionSystem {
    public void ignite() {
        System.out.println("点火系统:点火...");
    }
}

// 子系统 2: 燃油系统
class FuelSystem {
    public void injectFuel() {
        System.out.println("燃油系统:注入燃油...");
    }
}

// 子系统 3: 电池系统
class BatterySystem {
    public void supplyPower() {
        System.out.println("电池系统:供电...");
    }
}

// 外观类
class CarFacade {
    private IgnitionSystem ignitionSystem;
    private FuelSystem fuelSystem;
    private BatterySystem batterySystem;
    
    public CarFacade() {
        ignitionSystem = new IgnitionSystem();
        fuelSystem = new FuelSystem();
        batterySystem = new BatterySystem();
    }
    
    // 启动汽车
    public void startCar() {
        System.out.println("汽车启动准备...");
        ignitionSystem.ignite();
        fuelSystem.injectFuel();
        batterySystem.supplyPower();
        System.out.println("汽车启动完成!");
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        CarFacade carFacade = new CarFacade();
        carFacade.startCar();
    }
}

在这个例子中,CarFacade 作为外观类,封装了点火系统、燃油系统和电池系统。客户端只需要调用 CarFacade 的 startCar() 方法来启动汽车,而不需要知道内部子系统的具体操作细节。外观模式提供了简化客户端调用的接口,隐藏了子系统的复杂性。

总结

     外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,并将其封装在一个简单易用的外观类中,客户端可以通过调用外观类的方法来访问子系统的功能,而不需要了解具体子系统的实现细节。

外观模式的主要目的是简化客户端的使用,降低客户端与子系统之间的耦合度。它将复杂的系统分解成多个子系统,每个子系统负责完成一部分功能,并封装成一个外观类,客户端只需要与外观类进行交互,而不需要了解子系统的具体实现。

外观模式的优点包括:

  1. 简化客户端的使用。外观模式提供了一个简单易用的接口,客户端只需要调用外观类的方法就可以完成复杂的操作,不需要了解子系统的具体实现细节。
  2. 降低客户端与子系统之间的耦合度。外观模式将客户端与子系统解耦,客户端只需要与外观类进行交互,而不需要知道子系统的具体实现。
  3. 提高系统的灵活性和可扩展性。外观模式将系统分解成多个子系统,每个子系统可以独立开发和维护,可以方便地增加新的子系统或修改已有的子系统。

外观模式的缺点是可能会导致系统变得更加复杂。外观模式需要引入一个外观类来封装子系统,如果子系统的功能变得庞大复杂,外观类也会变得庞大复杂。

外观模式适用于以下几种情况:

  1. 当一个复杂子系统需要对外提供一个统一的接口时。
  2. 当客户端需要简化与子系统的交互时。
  3. 当需要降低客户端与子系统之间的耦合度时。

标签:外观,需要,系统,模式,设计模式,子系统,客户端
From: https://blog.csdn.net/Flying_Fish_roe/article/details/139379668

相关文章

  • 仅主机模式下无网配置ISO本地yum源,实现无网下载
            仅主机:虚拟机网络环境中的一种,一般认为仅主机模式下是不能联网的,不能和外网通信。实际上仅主机模式是可以连接外网的,只是配置比较麻烦,相比于桥接模式和NAT模式操作更加繁琐。        接下来,我们就说说怎么配置本地yum源。(我使用的是CentOS7)  ......
  • 【Rust】——面向对象设计模式的实现
     ......
  • 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法
    数据挖掘--引论数据挖掘--认识数据数据挖掘--数据预处理数据挖掘--数据仓库与联机分析处理数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法数据挖掘--分类数据挖掘--聚类分析:基本概念和方法频繁项集、闭项集和关联规则频繁项集:出现的次数超过最小支持度计数阈值......
  • 设计模式:命令模式(Command Pattern)及实例
     好家伙, 0.什么是命令模式在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象......
  • Python面试宝典:Python中与设计模式相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂
    Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第二十二章:代码设计和设计模式:第二节:设计模式】第二十二章:代码设计和设计模式第二节:设计模式创建型模式结构型模式行为型模式python中与设计模式相关的面试笔试题面试题1面试......
  • 设计模式-设计模式分类
    概述23种设计模式,分为创建型模式、结构型模式和行为型模式。另外,近来这一清单又增加了一些类别,例如,并发型模式、线程池模式、JavaEE企业技术的多层应用程序上的模式等。一、创建型模式1.工厂方法模式(FactoryMethod)定义一个接口用于创建对象,但是让子类决定初始化哪......
  • 设计模式-六大原则
    概述设计模式体现的是软件设计的思想,而不是软件技术,它重在使用接口与抽象类来解决各种问题。在使用这些设计模式时,应该首先遵守六大原则。原则含义具体方法开闭原则对扩展开放,对修改关闭多使用抽象类和接口里氏代换原则基类可以被子类替换使用抽象类继承,不使用具体类继承......
  • 数据库镜像 (SQL Server)操作模式
    数据库镜像会话以同步操作或异步操作运行。在异步操作下,事务不需要等待镜像服务器将日志写入磁盘便可提交,这样可最大程度地提高性能。在同步操作下,事务将在伙伴双方处提交,但会延长事务滞后时间。有两种镜像运行模式。一种是高安全性模式,它支持同步操作。在高安全性模式下,当会......
  • 前后端分离的四种开发模式
    前后端分离已经成为了开发的主流模式,很多老铁认为前后端分离就是各干各的,其实不然。前后端分离有多种模式,我们一一详解。1.前后端完全分离在这种模式下,前端和后端是完全独立的两个系统。前端使用一种框架(如React、Angular、Vue.js等)来实现用户界面,通过API调用后端提供的接口......
  • 命令模式
    基本介绍命令模式:将不同的请求封装成不同的请求对象,以便使用不同的请求;对于接收者来说,可以识别不同的请求对象类型,然后执行不同的操作;命令模式,解决了应用程序中,对象的职责(发送请求/执行请求),以及它们之间的通信方式;命令模式可以......