实例探索Java模式之路——门面模式

来源:互联网 发布:靠谱泰国代购淘宝 知乎 编辑:程序博客网 时间:2024/05/22 23:33
门面模式

门面模式相对比较简单,在这里简单介绍下门面模式。

1、门面模式是对象的结构模式。外部与一个子系统的通信必须通过一个统一的门面对象进行。

(比如,病人去医院看病,自己要进行挂号,付费,拿药等操作,现在用门面模式改造下,病人和医院之间出现了接待员,负责病人的行为操作,帮病人挂号,取药等,这个接待员就相当于一个门面)。



2、门面模式结构:


1、门面角色:客户端可以调用这个角色的方法。知道相关子系统的功能和责任。本角色将所有从客户端发来的请求委派到相应的子系统去。

2、子系统角色:可以有一个或者多个子系统,每一个子系统都是一个类的集合。每个子系统都可以被客户端直接调用,或者被门面角色调用。

子系统并不知道门面的存在,对于子系统门面仅仅是另外一个客户端而言。



3、一个警报系统的例子:


public class Alarm {
// 启动
public void turnOn() {
System.out.println("启动警报器");
}


// 关闭
public void turnOff() {
System.out.println("关闭警报器");
}


// 拉响
public void ring() {
System.out.println("拉响警报器");
}


// 停止
public void stop() {
System.out.println("停止警报器");
}
}


public class Camera {


// 打开
public void turnOn() {
System.out.println("打开照相机");
}


// 关闭
public void turnOff() {
System.out.println("关闭照相机");
}


// 转动
public void rotate(int degrees) {
System.out.println(degrees + "转动照相机");
}
}


public class Light {


// 打开
public void turnOn() {
System.out.println("打开灯");
}


// 关闭
public void turnOff() {
System.out.println("关闭灯");
}


// 换灯泡
public void changeBulb() {
System.out.println("换灯");
}
}


public class Sensor {
// 启动
public void turnOn() {
System.out.println("启动感应器");
}


// 关闭
public void turnOff() {
System.out.println("关闭感应器");
}


// 触发
public void changeBulb() {
System.out.println("触发感应器");
}
}


//客户端
public class client {
static private Camera c1, c2;
static private Light l1, l2, l3;
static private Sensor s;
static private Alarm a;


public static void main(String[] args) {


c1.turnOn();
c2.turnOn();
l1.turnOn();
l2.turnOn();
l3.turnOn();
s.turnOn();
a.turnOn();
}
}

不采用门面模式下的警报系统结构图:



经门面模式改造后:


//增加一个门面,处理繁杂工作

public class SecurityFacade {
static private Camera c1, c2;
static private Light l1, l2, l3;
static private Sensor s;
static private Alarm a;


public void activate() {
c1.turnOn();
c2.turnOn();
l1.turnOn();
l2.turnOn();
l3.turnOn();
s.turnOn();
a.turnOn();
}


public void deactivate() {
c1.turnOff();
c2.turnOff();
l1.turnOff();
l2.turnOff();
l3.turnOff();
s.turnOff();
a.turnOff();
}
}


//客户端
public class client {
private static SecurityFacade security;


public static void main(String[] args) {
security.activate();
}
}


采用门店模式下的系统结构图:


经过门面模式的改造,该系统变得非常简单,繁杂的操作都放在门面里面,客户端操作变得非常简单。


通过此实例,相信对该模式有了进一步的认识。

每天努力一点,每天都在进步。



原创粉丝点击