首页 > 其他分享 >外观模式

外观模式

时间:2024-09-17 15:02:22浏览次数:10  
标签:外观 void 模式 子系统 HomeFacade println public

外观模式

外观模式(Facade Pattern)是一种结构型设计模式,旨在为复杂的子系统提供一个简单的接口。它的核心思想是将系统的复杂性封装在一个统一的接口中,使得外部代码可以通过这个接口简化对复杂系统的操作。

主要组成部分

  1. 外观类(Facade Class):提供一个简化的接口来访问复杂的子系统。它定义了高层接口,并将请求委派给适当的子系统类。

  2. 子系统类(Subsystem Classes):这些是实现系统功能的类。它们通常具有复杂的接口和操作。

外观模式的优点

  • 简化使用:通过提供一个简化的接口来隐藏系统的复杂性,用户只需了解外观类的接口即可。

  • 降低耦合:外观模式减少了子系统之间的依赖,使系统更易于维护和扩展。

  • 增强灵活性:改变子系统的实现细节不会影响到客户端,只需要修改外观类即可。

外观模式的缺点

  • 增加系统的复杂性:在系统中增加了一个额外的层(外观类),这可能会使得系统的结构变得更复杂。

  • 可能掩盖子系统的功能:如果设计不当,外观模式可能会隐藏子系统的重要功能,导致无法使用这些功能。

适用场景

  • 当需要为一个复杂的子系统提供一个简化的接口时。

  • 当子系统的接口很复杂且不易使用时,外观模式可以将复杂性封装起来。

  • 当子系统之间存在紧密耦合时,外观模式可以减少这些耦合,使系统更易于管理。

例子

假设你有一个家庭影院系统,包括电视、音响系统、DVD 播放器等设备。你可以使用外观模式来简化对这些设备的控制。下面是一个简单的示例:

子系统类:

  • Light:表示灯光设备,有 on()off() 方法来控制灯的开关。

  • Stereo:表示音响设备,有 on()off() 方法来控制音响的开关。

  • AirConditioner:表示空调设备,有 on()off() 方法来控制空调的开关。

public class Light {
   public void on() {
       System.out.println("打开灯光");
  }

   public void off() {
       System.out.println("关闭灯光");
  }
}

public class Stereo {
   public void on() {
       System.out.println("打开音响,播放音乐");
  }

   public void off() {
       System.out.println("关闭音响");
  }
}

public class AirConditioner {
   public void on() {
       System.out.println("打开空调");
  }

   public void off() {
       System.out.println("关闭空调");
  }
}

外观类:

  • HomeFacade:这是外观类,它封装了对 LightStereoAirConditioner 的操作。它提供了 enterHome()leaveHome() 方法,简化了对这些设备的控制。

java复制代码package StructuralPattern.FacadePattern;

// 外观类
public class HomeFacade {
   private Light light;
   private Stereo stereo;
   private AirConditioner airConditioner;

   public HomeFacade() {
       light = new Light();
       stereo = new Stereo();
       airConditioner = new AirConditioner();
  }

   public void enterHome() {
       System.out.println("到家了,智能家具自动打开");
       light.on();
       stereo.on();
       airConditioner.on();
  }

   public void leaveHome() {
       System.out.println("出门了,智能家具自动关闭");
       light.off();
       stereo.off();
       airConditioner.off();
  }
}
  • 功能

  • enterHome() 方法:当用户到家时,自动开启灯光、音响和空调。

  • leaveHome() 方法:当用户离家时,自动关闭灯光、音响和空调。

客户端代码:

  • TestFacadePattern:这是测试代码,展示了如何使用 HomeFacade 类来简化对智能家居设备的操作。

public class TestFacadePattern {
   public static void main(String[] args) {
       HomeFacade home = new HomeFacade();

       home.enterHome();

       System.out.println();

       home.leaveHome();
  }
}
  • 功能:

    • 创建 HomeFacade 对象并调用 enterHome() 方法,展示了到家时的自动操作。

    • 调用 leaveHome() 方法,展示了离家时的自动操作。

外观模式的核心概念

外观模式通过提供一个简化的接口(HomeFacade 类),隐藏了系统的复杂性(多个子系统类 LightStereoAirConditioner)。在你的例子中,客户端不需要了解 LightStereoAirConditioner 的具体实现细节,只需要与 HomeFacade 交互即可完成所有操作。这种设计使得系统更加易用,减少了客户端与子系统之间的耦合。

总结

外观模式通过提供一个简化的接口来隐藏子系统的复杂性,使得客户端可以更加方便地使用系统。它适用于需要封装复杂子系统的情况,并帮助减少系统之间的耦合。

标签:外观,void,模式,子系统,HomeFacade,println,public
From: https://www.cnblogs.com/20lxj666/p/18388690

相关文章

  • 装饰者模式
    装饰者模式装饰者模式(DecoratorPattern)是一种结构型设计模式,主要用于动态地给对象添加额外的功能,而不改变其结构。这个模式通过创建一个装饰类来包装原始对象,从而扩展其功能。主要角色组件(Component):定义一个接口或抽象类,声明可以被装饰的对象所共有的接口。具体组件(Concrete......
  • 组合模式
    组合模式组合模式(CompositePattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。它允许客户端以统一的方式处理单个对象和对象集合,使得客户端不需要区分具体的对象类型,从而简化了代码的处理逻辑。主要组成部分Component(组件):定义了叶子对象和......
  • 桥接模式
    桥接模式桥接模式(BridgePattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,从而使它们可以独立地变化。这个模式的主要目的是解耦抽象和实现,使得它们可以独立地变化和扩展。主要概念抽象(Abstraction):这是一个接口或抽象类,它定义了高层次的操作。修正抽象(RefinedA......
  • 【加密算法基础——AES CBC模式代码解密实践】
    AES解密实践之代码实现AES解密使用python脚本比较灵活,但是一定要保证脚本是调试过的,才能在找到正确的密文,密钥,初始向量的情况下,解出正确的明文。但是对于AES解密,命令行无法处理key截断的问题。实际测试了一下,CBC模式,对于key截断的问题可以解决,但是CFB模式,目前还无法实验......
  • 设计模式---- 门面模式
    门面模式门面模式(FacadePattern)是一种结构型设计模式,用于为复杂子系统提供一个统一、简单的接口,隐藏系统的复杂性。通过门面模式,客户端无需直接与系统的内部组件交互,而是通过门面类与系统打交道,简化了客户端的使用,降低了系统的复杂性和耦合度。门面模式的主要概念定义:门面模......
  • 攻防世界 ————新手模式适合作为桌面 misc
    (本篇文章参考大佬的解题)下载附件,得到rar的的压缩包,解压缩,打开文件后有一张图片:打开图片发现什么也没有:使用软件Stegsolve打开图片看有什么问题:点击下一页:点击后发现有一个二维码:把他保存下来,使用软件扫码看看里面有什么:(我是用微信扫码的)出现了十六进制的数字:把他复......
  • 设计模式---- 工厂模式
    工厂模式工厂模式是一种创建型设计模式,它的主要目的是将对象的创建过程与对象的使用过程分离。工厂模式通过引入工厂类或者工厂方法,隐藏对象创建的复杂性,使得代码更加灵活、可扩展。工厂模式的使用场景主要在于:当我们需要对创建的对象进行封装或延迟创建时,工厂模式是一个很好的选......
  • 反DDD模式之关系型数据库
    本文书接上回《图穷匕见-所有反DDD模式都是垃圾》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。背景我在与开发者交流关于DDD的建模思路时,往往会遇到一个难题,就是不少经验丰富的开发者,总是带着技......
  • 反DDD模式之关系型数据库
    本文书接上回《图穷匕见-所有反DDD模式都是垃圾》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。背景我在与开发者交流关于DDD的建模思路时,往往会遇到一个难题,就是不少经验丰富的开发者,总是带......
  • Qt:实现单例模式
    前言记录一下。正文单例模式根据实现方式和应用场景在Qt中可以分为以下几种类型:1.懒汉式单例懒汉式单例在第一次使用时才创建实例,延迟了对象的初始化。懒汉式单例分为线程安全和线程不安全两种实现方式。线程不安全的懒汉式单例:在第一次调用getInstance()时创建......