您的位置:首页 > 编程语言 > Java开发

Java设计模式-外观模式

2017-07-01 11:51 288 查看

1、概念

外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一样,可以将类与类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类与类之间的耦合度,该模式中没有涉及到接口。

我们先看两张结构图,可以一目了然的了解外观模式的作用。

未使用外观模式:



使用了外观模式:



我们来看一下外观模式(门面模式)的两个角色



(1)门面(Facade)角色:客户端可以调用这个角色的方法,此角色知晓相关的(一个或者多个)子系统的功能和责任,在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。

(2)子系统(SubSystem)角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如上面的子系统就是由ModuleA、ModuleB、ModuleC三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。

2、代码实现

/**
* 示例:外观模式,也称门面模式
*
* 优点:为了解决类与类之间的依赖关系,降低了类与类之间的耦合度
*
* 该模式中没有涉及到接口
*/

class Memory {
public void startup() {
System.out.println("this is memory startup...");
}

public void shutdown() {
System.out.println("this is memory shutdown...");
}

}

class CPU {
public void startup() {
System.out.println("this is CPU startup...");
}

public void shutdown() {
System.out.println("this is CPU shutdown...");
}
}


/**
* 作为Facade,持有Memory、CPU的实例
*
* 任务让Computer帮咱们处理,我们无需直接和Memory、CPU打交道
*
* 这里有点像去商店里买东西:咱们买东西只需要到商店去买,而无需去生产厂家那里买。
*
* 商店就可以称为是一个Facade外观(门面)模式。
*/
class Computer {
private Memory memory;
private CPU cpu;

public Computer() {
memory = new Memory();
cpu = new CPU();
}

public void startup() {
System.out.println("begin to start the computer...");
memory.startup();
cpu.startup();
System.out.println("computer start finished...");
}

public void shutdown() {
System.out.println("begin to close the computer...");
memory.shutdown();
cpu.shutdown();
System.out.println("computer close finished...");
}
}


/**
* 客户端测试类
*/
public class Test {
public static void main(String[] args) {
Computer computer = new Computer();
computer.startup();
System.out.println("\n");
computer.shutdown();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: