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

    xiaoxiao2026-04-23  2

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

    转载请注明原文地址: https://ju.6miu.com/read-1309158.html
    最新回复(0)