Java中如何运用外观模式简化复杂设计?

2026-05-24 02:502阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1033个文字,预计阅读时间需要5分钟。

Java中如何运用外观模式简化复杂设计?

目录+简介+外观模式之理解+实例+定义子系统+外观类+测试+好文推荐+简介+外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了统一的接口。

目录
  • 简介
  • 外观模式之理解
  • 实例
    • ①、定义子系统
    • ②、外观类
    • ③、测试
  • 好文推荐

    Java中如何运用外观模式简化复杂设计?

    简介

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

    这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

    外观模式之理解

    对于外观模式,我们可以理解为他是将一些复杂的接口或类进行隐藏,自己暴露出更为简单的操作方法,使得以我们不需要去对复杂方法的操作。就比如要完成一道工序,工序又有许多步骤,在不同情况要使用不同工序的方法,如果是传统的方式,一个一个调用,那么到一定量就会显得调用的复杂并且维护起来困难,因此可以使用外观模式,将一起使用的方法封装在一起,这样只需要调用这个外观的方法即可完成。
    我们看一下外观模式的UML图:

    实例

    采用智能家居的例子来理解外观模式,例子很简单,当我们按下一键启动开关,就可以为我们打开/关闭窗户、电视、空调、灯光等。
    先看一些类图:

    具体代码如下:

    ①、定义子系统

    子系统分为:灯光、空调、电视、窗户。采用单例模式,并且声明开启、关闭的方法。
    这里只粘贴一个,其他的代码类似。

    package com.lyd.demo.subsystem; /** * @Author: lyd * @Description: 子系统 - 空调 * @Date: 2022-08-31 */ public class AirConditioner { private static AirConditioner airConditioner = new AirConditioner(); public static AirConditioner getAirConditioner() { return airConditioner; } public void on() { System.out.println("智能家居为您打开[空调]"); } public void off() { System.out.println("智能家居为您关闭[空调]"); } }

    ②、外观类

    采用单例模式,实例化对象,并且根据需要去调用方法,暴露出接口即可完成,这里是启动所有设备,还可以根据需要去选择。

    package com.lyd.demo.faced; import com.lyd.demo.subsystem.AirConditioner; import com.lyd.demo.subsystem.Lights; import com.lyd.demo.subsystem.Tv; import com.lyd.demo.subsystem.Windows; /** * @Author: lyd * @Description: 外观模式 * @Date: 2022-08-31 */ public class SmartHomeFaced { private Lights[] lights = new Lights[4]; // 4盏灯 private Tv tv; private AirConditioner airConditioner; private Windows windows; public SmartHomeFaced() { this.lights[0] = Lights.getLights(); this.lights[1] = Lights.getLights(); this.lights[2] = Lights.getLights(); this.lights[3] = Lights.getLights(); this.tv = Tv.getTv(); this.airConditioner = AirConditioner.getAirConditioner(); this.windows = Windows.getWindows(); } public void openAll() { lights[0].on(0); lights[1].on(1); lights[2].on(2); lights[3].on(3); tv.on(); airConditioner.on(); windows.on(); } public void offAll() { lights[0].off(0); lights[1].off(1); lights[2].off(2); lights[3].off(3); tv.off(); airConditioner.off(); windows.off(); } }

    ③、测试

    调用外观暴露的接口方法就可以。

    package com.lyd.demo.test; import com.lyd.demo.faced.SmartHomeFaced; /** * @Author: lyd * @Description: 测试 * @Date: 2022-08-31 */ public class FacedTest { public static void main(String[] args) { SmartHomeFaced smartHomeFaced = new SmartHomeFaced(); smartHomeFaced.openAll(); smartHomeFaced.offAll(); } }

    运行结果:

    好文推荐

    • 阿里云 - 开发者社区developer.aliyun.com/article/420326
    • 掘金juejin.cn/post/6844903680303431693

    今天的内容还算是简单好理解的,多看看,多动手理解就会更快!

    本文共计1033个文字,预计阅读时间需要5分钟。

    Java中如何运用外观模式简化复杂设计?

    目录+简介+外观模式之理解+实例+定义子系统+外观类+测试+好文推荐+简介+外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了统一的接口。

    目录
    • 简介
    • 外观模式之理解
    • 实例
      • ①、定义子系统
      • ②、外观类
      • ③、测试
    • 好文推荐

      Java中如何运用外观模式简化复杂设计?

      简介

      外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

      这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

      外观模式之理解

      对于外观模式,我们可以理解为他是将一些复杂的接口或类进行隐藏,自己暴露出更为简单的操作方法,使得以我们不需要去对复杂方法的操作。就比如要完成一道工序,工序又有许多步骤,在不同情况要使用不同工序的方法,如果是传统的方式,一个一个调用,那么到一定量就会显得调用的复杂并且维护起来困难,因此可以使用外观模式,将一起使用的方法封装在一起,这样只需要调用这个外观的方法即可完成。
      我们看一下外观模式的UML图:

      实例

      采用智能家居的例子来理解外观模式,例子很简单,当我们按下一键启动开关,就可以为我们打开/关闭窗户、电视、空调、灯光等。
      先看一些类图:

      具体代码如下:

      ①、定义子系统

      子系统分为:灯光、空调、电视、窗户。采用单例模式,并且声明开启、关闭的方法。
      这里只粘贴一个,其他的代码类似。

      package com.lyd.demo.subsystem; /** * @Author: lyd * @Description: 子系统 - 空调 * @Date: 2022-08-31 */ public class AirConditioner { private static AirConditioner airConditioner = new AirConditioner(); public static AirConditioner getAirConditioner() { return airConditioner; } public void on() { System.out.println("智能家居为您打开[空调]"); } public void off() { System.out.println("智能家居为您关闭[空调]"); } }

      ②、外观类

      采用单例模式,实例化对象,并且根据需要去调用方法,暴露出接口即可完成,这里是启动所有设备,还可以根据需要去选择。

      package com.lyd.demo.faced; import com.lyd.demo.subsystem.AirConditioner; import com.lyd.demo.subsystem.Lights; import com.lyd.demo.subsystem.Tv; import com.lyd.demo.subsystem.Windows; /** * @Author: lyd * @Description: 外观模式 * @Date: 2022-08-31 */ public class SmartHomeFaced { private Lights[] lights = new Lights[4]; // 4盏灯 private Tv tv; private AirConditioner airConditioner; private Windows windows; public SmartHomeFaced() { this.lights[0] = Lights.getLights(); this.lights[1] = Lights.getLights(); this.lights[2] = Lights.getLights(); this.lights[3] = Lights.getLights(); this.tv = Tv.getTv(); this.airConditioner = AirConditioner.getAirConditioner(); this.windows = Windows.getWindows(); } public void openAll() { lights[0].on(0); lights[1].on(1); lights[2].on(2); lights[3].on(3); tv.on(); airConditioner.on(); windows.on(); } public void offAll() { lights[0].off(0); lights[1].off(1); lights[2].off(2); lights[3].off(3); tv.off(); airConditioner.off(); windows.off(); } }

      ③、测试

      调用外观暴露的接口方法就可以。

      package com.lyd.demo.test; import com.lyd.demo.faced.SmartHomeFaced; /** * @Author: lyd * @Description: 测试 * @Date: 2022-08-31 */ public class FacedTest { public static void main(String[] args) { SmartHomeFaced smartHomeFaced = new SmartHomeFaced(); smartHomeFaced.openAll(); smartHomeFaced.offAll(); } }

      运行结果:

      好文推荐

      • 阿里云 - 开发者社区developer.aliyun.com/article/420326
      • 掘金juejin.cn/post/6844903680303431693

      今天的内容还算是简单好理解的,多看看,多动手理解就会更快!