8.外观模式(结构型)-灵析社区

菜鸟码转

八、 外观模式(结构型)

外观模式是一种结构型设计模式,它提供了一个简单的接口,用于访问复杂系统中的多个子系统。外观模式可以将一组复杂的对象封装成一个单独的对象,这个对象提供了一个统一的接口,使得客户端可以更加方便地使用这些对象。

外观模式常常被用来隐藏底层系统的复杂性,并且可以帮助客户端减少与底层系统的耦合程度。当我们需要改变底层系统时,只需修改外观类即可,而不会对客户端产生影响。

外观模式通常包含一个外观类(也称为门面类),该类知道如何处理客户端的请求,并将其转发给底层系统中的适当子系统。客户端只需与外观类进行交互,无需了解底层系统的具体实现细节。

总之,外观模式提供了一种简单、直接的方式来访问复杂系统中的子系统,并且可以降低客户端与底层系统之间的耦合程度。

外观模式的应用场景

外观模式通常适用于以下场景:

  • 当一个系统拥有多个复杂的子系统时,可以使用外观模式将其简化。这样,客户端只需与外观类进行交互,无需了解底层系统的具体实现细节;
  • 当一个系统需要与其他系统进行交互时,可以使用外观模式来隐藏它们之间的复杂性。这样,客户端只需与外观类进行交互,无需了解底层系统与其他系统之间的具体交互方式;
  • 当一个系统需要支持多种不同的用户界面或操作系统时,可以使用外观模式来封装不同的实现方式。这样,客户端只需与外观类进行交互,无需了解各种不同的实现方式;
  • 当一个系统需要频繁地改变其组件时,可以使用外观模式来降低对客户端的影响。这样,只需修改外观类即可,而不会对客户端产生影响。

总之,外观模式可以帮助我们降低系统的复杂性,并且提供了一种简单、直接的方式来访问多个子系统。它适用于多种不同的应用场景,并且可以帮助我们实现更加灵活和易于维护的设计。

示例代码

以下是外观模式的 Java 代码示例:在这个示例中,我们使用外观模式简化了一个计算机的开启和关闭过程。计算机包含了许多子系统(例如CPU、硬盘等),它们之间存在着复杂的相互依赖关系。我们使用外观模式来隐藏系统的复杂性,并提供一个简单的接口来进行操作。

  • 子系统1:CPU
package cn.leetcode;

public class CPU {
  
    public void start() {
        System.out.println("CPU 开始工作");
    }

    public void shutdown() {
        System.out.println("CPU 结束工作");
    }
  
}
  • 子系统 2:硬盘
package cn.leetcode;

public class HardDrive {
  
    public void start() {
        System.out.println("硬盘已经启动");
    }

    public void shutdown() {
        System.out.println("硬盘已经关闭");
    }
  
}
  • 子系统 3:内存
package cn.leetcode;

public class Memory {
  
    public void start() {
        System.out.println("内存条已经启动");
    }

    public void shutdown() {
        System.out.println("内存条关闭");
    }
  
}
  • 外观类:Computer,定义了内部零件的执行顺序,方便了客户端的使用
package cn.leetcode;

public class Computer {
  
    private CPU cpu;
  
    private HardDrive hardDrive;
  
    private Memory memory;

    public Computer() {
        this.cpu = new CPU();
        this.hardDrive = new HardDrive();
        this.memory = new Memory();
    }

    public void start() {
        System.out.println("电脑准备启动");
        cpu.start();
        hardDrive.start();
        memory.start();
        System.out.println("电脑已经启动");
    }

    public void shutdown() {
        System.out.println("电脑准备关闭");
        cpu.shutdown();
        hardDrive.shutdown();
        memory.shutdown();
        System.out.println("电脑已经关闭");
    }
  
}
  • 客户端代码
package cn.leetcode;

public class Client {

    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.start();
        System.out.println("在电脑前工作");
        computer.shutdown();
    }

}

输出:

电脑准备启动
CPU 开始工作
硬盘已经启动
内存条已经启动
电脑已经启动
在电脑前工作
电脑准备关闭
CPU 结束工作
硬盘已经关闭
内存条关闭
电脑已经关闭

在这个示例中,Computer 类是外观类,提供了一个简单的接口来操作计算机。它将 CPU、硬盘和内存等子系统封装起来,客户端只需要通过 Computer 类的 start() 和 shutdown() 方法来启动和关闭计算机即可。客户端不需要知道计算机启动和关闭的具体细节,从而实现了系统的解耦和简化。

阅读量:2010

点赞量:0

收藏量:0