网站的投资和建设项目,站群服务器,网页链接视频怎么下载到本地,做网站推广优化转自#xff1a;https://www.cnblogs.com/lthIU/p/5860607.html 针对外观模式#xff0c;在项目开发和实际运用中十分频繁#xff0c;但是其极易理解#xff0c;下面就简要介绍一下。 一、概念介绍 外观模式#xff08;Facade#xff09;,他隐藏了系统的复杂性#xff0… 转自https://www.cnblogs.com/lthIU/p/5860607.html 针对外观模式在项目开发和实际运用中十分频繁但是其极易理解下面就简要介绍一下。 一、概念介绍 外观模式Facade,他隐藏了系统的复杂性并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口这个接口使得子系统更容易被访问或者使用。 二、角色及使用场景 简单来说该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中设计到3个角色。 1.门面角色外观模式的核心。它被客户角色调用它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。 2.子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互也可以由供外界调用的接口。 3.客户角色:通过调用Facede来完成要实现的功能。 使用场景 1- 为复杂的模块或子系统提供外界访问的模块 2- 子系统相互独立 3- 在层析结构中可以使用外观模式定义系统的每一层的入口。 三、实例 下面我们就通过一个简单的例子来实现该模式。 每个Computer都有CPU、Memory、Disk。在Computer开启和关闭的时候相应的部件也会开启和关闭所以使用了该外观模式后会使用户和部件之间解耦。如 包体的创建 代码实现 首先是子系统类 【代码清单--1】 1 package com.huawei.facadeDesign.children;2 3 import org.apache.log4j.Logger;4 5 /**6 * cpu子系统类7 * author Administrator8 *9 */
10 public class CPU
11 {
12 public static final Logger LOGGER Logger.getLogger(CPU.class);
13 public void start()
14 {
15 LOGGER.info(cpu is start...);
16 }
17
18 public void shutDown()
19 {
20 LOGGER.info(CPU is shutDown...);
21 }
22 } View Code 【代码清单--2】 1 package com.huawei.facadeDesign.children;2 3 import org.apache.log4j.Logger;4 5 /**6 * Disk子系统类7 * author Administrator8 *9 */
10 public class Disk
11 {
12 public static final Logger LOGGER Logger.getLogger(Disk.class);
13 public void start()
14 {
15 LOGGER.info(Disk is start...);
16 }
17
18 public void shutDown()
19 {
20 LOGGER.info(Disk is shutDown...);
21 }
22 } View Code 【代码清单--3】 1 package com.huawei.facadeDesign.children;2 3 import org.apache.log4j.Logger;4 5 /**6 * Memory子系统类7 * author Administrator8 *9 */
10 public class Memory
11 {
12 public static final Logger LOGGER Logger.getLogger(Memory.class);
13 public void start()
14 {
15 LOGGER.info(Memory is start...);
16 }
17
18 public void shutDown()
19 {
20 LOGGER.info(Memory is shutDown...);
21 }
22 } View Code 然后是门面类Facade 【代码清单--4】 1 package com.huawei.facadeDesign.facade;2 3 import org.apache.log4j.Logger;4 5 import com.huawei.facadeDesign.children.CPU;6 import com.huawei.facadeDesign.children.Disk;7 import com.huawei.facadeDesign.children.Memory;8 9
10 /**
11 * 门面类核心
12 * author Administrator
13 *
14 */
15 public class Computer
16 {
17 public static final Logger LOGGER Logger.getLogger(Computer.class);
18
19 private CPU cpu;
20 private Memory memory;
21 private Disk disk;
22 public Computer()
23 {
24 cpu new CPU();
25 memory new Memory();
26 disk new Disk();
27 }
28 public void start()
29 {
30 LOGGER.info(Computer start begin);
31 cpu.start();
32 disk.start();
33 memory.start();
34 LOGGER.info(Computer start end);
35 }
36
37 public void shutDown()
38 {
39 LOGGER.info(Computer shutDown begin);
40 cpu.shutDown();
41 disk.shutDown();
42 memory.shutDown();
43 LOGGER.info(Computer shutDown end...);
44 }
45 } View Code 最后为客户角色。 【代码清单--5】 1 package com.huawei.facadeDesign;2 3 import org.apache.log4j.Logger;4 5 import com.huawei.facadeDesign.facade.Computer;6 7 /**8 * 客户端类9 * author Administrator
10 *
11 */
12 public class Cilent {
13 public static final Logger LOGGER Logger.getLogger(Cilent.class);
14 public static void main(String[] args)
15 {
16 Computer computer new Computer();
17 computer.start();
18 LOGGER.info();
19 computer.shutDown();
20 }
21
22 } View Code 【代码清单--6】运行结果 从上面的实例来看有了这个Facade类也就是Computer类用户就不用亲自去调用子系统中的Disk,Memory、CPU类了不需要知道系统内部的实现细节甚至都不用知道系统内部的构成。客户端只需要跟Facade交互就可以了。 四、优点 - 松散耦合 使得客户端和子系统之间解耦让子系统内部的模块功能更容易扩展和维护 - 简单易用 客户端根本不需要知道子系统内部的实现或者根本不需要知道子系统内部的构成它只需要跟Facade类交互即可。 - 更好的划分访问层次 有些方法是对系统外的有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中这样就可以实现客户端的使用很好的隐藏了子系统内部的细节。 五、延伸及应用补充 ... 希望对大家的学习有帮助请多指教。 转载于:https://www.cnblogs.com/Hermioner/p/10244901.html