设计模式 结构型设计模式之门面模式

来源:互联网 发布:2k16mc捏脸数据乔丹 编辑:程序博客网 时间:2024/05/17 03:14

1 基础知识

1.1 标准定义

门面模式标准定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

1.2 分析和说明

门面模式也叫外观模式,属于结构型设计模式。外部与一个子系统的通信必须通过一个统一的门面对象进行 。门面模式提供一个高层析的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。

Facade结构角色包括门面角色和子系统角色。

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

子系统角色:可以同时又一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的聚合 。每一个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。


2 应用场景举例

比如公司总有前台,采访的人员主要是做这几类工作,一类是过来工作,一类是访客,一类是邮差送东西,还有就是领带视察等。但是都是通过前台来实现。

可以把Facade类理解为门面角色,DoWork类,Inspection类,Visit类,Post类是子系统角色。其结构类图如下,Facade类聚合其他四个类。

在门面模式的应用中,所有的操作都要经过门面来协调或验证。门面这个高层接口使得各个子系统更容易使用和维护,降低耦合便于扩展。可以解耦关联、增加各部门的独立性,各部分的修改、扩展不影响其他部分,满足组件设计对外提供一致性的要求。


3  Java实现程序代码

Java程序实现主要包括Facade类文件,DoWork类文件,Inspection类文件,Post类文件和Visit类文件等5个文件。程序代码一次为:

public class Facade {
private Visit visit = new Visit();
private Post post= new Post();
private Inspection inspection = new Inspection();
private DoWork doWork = new DoWork();
public void Operate(String operation){
if(operation.toLowerCase().equals("visit")){
visit.operate();
}else if(operation.toLowerCase().equals("post")){
post.operate();
}else if(operation.toLowerCase().equals("inspection")){
inspection.operate();
}else if(operation.toLowerCase().equals("doWork")){
doWork.operate();
}else 
System.out.println("没有对应事项,不能工作");
}
}


public class DoWork {
public void operate(){
System.out.println("员工 :打卡考勤。");
}
}


public class Inspection {
public void operate(){
System.out.println("领导视察:端茶送水。");
}
}


public class Post {
public void operate(){
System.out.println("邮递员:登记收发物品。");
}
}


public class Visit {
public void operate(){
System.out.println("访客:登机身份证。");
}
}


门面模式测试代码为:

public class Client {
public static void main(String[] args){
Facade facade = new Facade();
//向前台要求访客
facade.Operate("visit");
facade.Operate("post");
facade.Operate("inspection");
facade.Operate("doWork");
}
}

0 0
原创粉丝点击