Java外观模式详解(定义设计及实现例子)

Java外观模式详解(定义设计及实现例子)-mikechen

Java外观模式是常见的Java设计模式用途非常的广,下面我就重点详解Java外观模式的实现与使用@mikechen

Java外观模式定义

Java中的外观模式Facade Pattern是一种结构型设计模式,其目的是提供一个简单的接口,隐藏一系列复杂的子系统并向客户端暴露一个简单的接口。

 

Java外观模式优缺点

Java外观模式优缺点:

1.简化客户端代码

外观模式可以将复杂的系统封装在一个外观类中,为客户端提供一个简单的接口,减少了客户端与系统之间的耦合度。

2.提高系统的可维护性

外观模式将系统的复杂性隐藏在外观类中,使得系统的维护更加容易,减少了系统维护的难度和成本。

3.提高系统的安全性

外观模式可以限制客户端访问系统的部分功能,提高了系统的安全性。

 

Java外观模式缺点:

1.不符合开闭原则

外观模式在增加新的子系统或者修改子系统的行为时,可能需要修改外观类的代码,这可能会导致系统的破坏或者不稳定。

2.不能很好地处理子系统之间的交互

外观模式将子系统封装在外观类中,但是子系统之间的交互可能会影响系统的行为,这种情况下,外观模式并不能很好地处理。

 

Java外观模式设计

在Java中,外观模式的实现通常涉及以下几个角色:

Java外观模式详解(定义设计及实现例子)-mikechen

1.Facade(外观)

外观模式的核心就在于Facade类,这是客户端直接与之交互的接口,隐藏所有的子系统交互和细节实现。

 

2.Subsystem(子系统)

这是一个或多个复杂的类或组件,它们实现了系统的核心功能。

子系统可以包含多个类,每个类都提供了不同的功能,但它们共同实现了系统的某个功能。

 

Java外观模式实现

在Java外观模式的实现如下所示:

// 外观类
public class Facade {
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;
    private SubsystemC subsystemC;
    
    public Facade() {
        this.subsystemA = new SubsystemA();
        this.subsystemB = new SubsystemB();
        this.subsystemC = new SubsystemC();
    }
    
    public void operation() {
        subsystemA.operationA();
        subsystemB.operationB();
        subsystemC.operationC();
    }
}

// 子系统A
public class SubsystemA {
    public void operationA() {
        System.out.println("SubsystemA operationA");
    }
}

// 子系统B
public class SubsystemB {
    public void operationB() {
        System.out.println("SubsystemB operationB");
    }
}

// 子系统C
public class SubsystemC {
    public void operationC() {
        System.out.println("SubsystemC operationC");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.operation();
    }
}

在上面的代码中:

  1. Facade类是外观类,它包含了三个子系统,即SubsystemA、SubsystemB和SubsystemC;
  2. Facade类的operation方法是客户端调用的唯一方法,该方法将处理所有复杂的子系统交互;
  3. 客户端不需要知道任何子系统的细节实现,客户端只需要实例化Facade类并调用operation方法即可完成系统操作。

Java外观模式适用于需要简化系统复杂性和灵活性的场景,更多请查看:Java设计模式:23种设计模式(万字图文全面总结)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法