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

本文介绍了门面模式这一对象结构型模式的基本概念及其应用场景。通过一个警报系统的实例,展示了门面模式如何简化客户端与子系统之间的交互过程。
门面模式

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

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


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


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


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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

powerfuler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值