欢迎光临散文网 会员登陆 & 注册

Java设计模式之—外观模式

2023-08-19 15:48 作者:大大的月亮吖吖  | 我要投稿

外观模式是一种软件设计模式,它为复杂的子系统提供了一个统一的接口,使得这些子系统更加容易被访问或使用。它的主要目标是提供一个高层次的接口,隐藏子系统的复杂性。

主要解决什么问题

外观模式主要解决的是子系统与客户端之间的紧耦合问题,使得客户端可以更简单地调用子系统的功能,而不需要关心子系统内部的复杂实现细节。

在什么时候我们需要使用外观模式

当我们要为一个复杂的子系统提供一个简单的接口时,或者当我们要解耦子系统与其客户端之间的关系时,我们需要使用外观模式。

生活中的应用实例

假设你到了一个新城市,你可能需要使用各种服务,比如餐饮、住宿、交通等。你可以选择自己去找各个服务提供者,这就像直接使用子系统。但如果有一个旅行代理(外观)提供了所有这些服务的接入点,你只需要和旅行代理打交道,就可以得到你需要的所有服务,这会使你的生活更加简单。

优点

  1. 对客户端屏蔽子系统组件,减少了客户处理的对象数目并使子系统使用起来更容易。

  2. 实现了子系统与客户端之间的松耦合关系。

缺点

  1. 不符合开闭原则,如果业务复杂则会导致类的数量增多,增加了系统的复杂性。

  2. 如果不正确或过度使用外观模式,可能会导致系统的设计变得复杂或难以理解。

使用场景

  1. 当需要为一个复杂的子系统提供一个简单的接口时。

  2. 客户端与子系统之间存在很多依赖时。

代码示例

假设我们有一个复杂的电脑系统,包括CPU、内存和硬盘三个子系统。我们可以创建一个外观类来简化与这些子系统的交互。

//子系统

class CPU {

    public void start() {

        System.out.println("CPU is start...");

    }

}


class Memory {

    public void start() {

        System.out.println("Memory is start...");

    }

}


class Disk {

    public void start() {

        System.out.println("Disk is start...");

    }

}


//外观类

class Computer {

    private CPU cpu;

    private Memory memory;

    private Disk disk;

    

    public Computer(){

        cpu = new CPU();

        memory = new Memory();

        disk = new Disk();

    }

    

    public void start() {

        System.out.println("Computer start begin");

        cpu.start();

        memory.start();

        disk.start();

        System.out.println("Computer start end");

    }

}


//客户端

public class FacadePatternDemo {

    public static void main(String[] args) {

        Computer computer = new Computer();

        computer.start();

    }

}

在这个示例中,我们创建了一个Computer类作为外观,提供了一个start方法,将启动电脑的复杂过程封装起来。客户端只需要调用这个方法,就可以启动电脑,不需要关心具体的实现细节。

Java设计模式之—外观模式的评论 (共 条)

分享到微博请遵守国家法律