Java设计模式 - 外观模式

Posted 小二上酒8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式 - 外观模式相关的知识,希望对你有一定的参考价值。

目录

  • Java设计模式 - 外观模式

简介

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

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

————菜鸟联盟

外观模式之理解

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

我们看一下外观模式的UML图:

Java设计模式

实例

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

先看一些类图:

Java设计模式

具体代码如下:

①、定义子系统

子系统分为:灯光、空调、电视、窗户。采用单例模式,并且声明开启、关闭的方法。

这里只粘贴一个,其他的代码类似。

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();

运行结果:

Java设计模式

以上是关于Java设计模式 - 外观模式的主要内容,如果未能解决你的问题,请参考以下文章

Java设计模式学习记录-外观模式

JAVA设计模式之外观模式

Java设计模式之《外观模式》及应用场景

Java设计模式菜鸟系列外观模式建模与实现

java设计模式-外观模式

Java设计模式-外观模式