设计模式之--外观模式

本文介绍了设计模式中的外观模式,包括其定义、结构、使用场景及优缺点,并通过Java代码示例展示了如何利用外观模式简化子系统调用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式之–外观模式

简介:

本篇文章是介绍 23 中设计模式中的结构型设计模式中的外观模式.使用的是 Java 代码.

目录:

1.什么是外观模式

2.外观模式的使用场景和优点

3.外观模式的简单运用

1.什么是外观模式

定义:

  外观模式也叫门面模式是结构型设计模式之一. 是我们常用写用来写一些简单工具类的常用做法. 可能我们用了都不知道.就是通过一个我们自己写的外观类去调用另外一些类的功能实现.然后我外部调用的使用就只要简单的用外观类就可以了.

要求一个子系统的外部与内部的通信必须通过一个统一的对象进行. 此模式提供一个高层的接口, 使得子系统更易于使用.

结构:

外观模式结构

  • Facde(外观类)

知道哪些子系统类负责处理请求, 将客户端的请求代理给适当的子系统对象.

  • Subsystem(子系统类)

可以有一个或多个子系统. 实现子系统的功能, 处理外观类指派的任务, 注意子系统不含有外观类的引用.

2.外观模式的使用场景和优点

使用场景:

  • 构建一个有层次结构的子系统时, 使用外观模式定义子系统中每层的入口点, 如果子系统之间是相互依赖的, 则可以让其通过外观接口进行通信, 减少子系统之间的依赖关系.

  • 子系统往往会因为不断的重构演化变得越来越复杂, 大多数的模式使用时也会产生很多很小的类, 这给外部调用它们的用户程序带来了使用上的困难. 我们可以使用外观类提供一个简单的接口, 对外隐藏子系统的具体实现.

  • 当代码难以拓展和维护, 但新的需求又必须依赖它时, 可以使用外观类为遗留代码加一个简单的接口, 让外部和内部的交互更加简单.

优点:

  • 减少系统的相互依赖, 所有依赖都是对外观的依赖, 与子系统无关.
  • 对用户隐藏了子系统的具体实现, 减少系统耦合.
  • 加强了安全性, 子系统中的方法如果不在外观类中开通, 就无法访问到子系统中的方法.

缺点:

  • 不符合开闭原则. 如果新的业务逻辑出现, 可能要直接修改外观类.

3.外观模式的简单运用

子系统类


/**
 * cpu子系统类
 * @author Administrator
 *
 */
public class CPU 
{
    public static final Logger LOGGER = Logger.getLogger(CPU.class);
    public void start()
    {
        LOGGER.info("cpu is start...");
    }
    
    public void shutDown()
    {
        LOGGER.info("CPU is shutDown...");
    }
}


/**
 * Disk子系统类
 * @author Administrator
 *
 */
public class Disk
{
    public static final Logger LOGGER = Logger.getLogger(Disk.class);
    public void start()
    {
        LOGGER.info("Disk is start...");
    }
    
    public void shutDown()
    {
        LOGGER.info("Disk is shutDown...");
    }
}

/**
 * Memory子系统类
 * @author Administrator
 *
 */
public class Memory
{
    public static final Logger LOGGER = Logger.getLogger(Memory.class);
    public void start()
    {
        LOGGER.info("Memory is start...");
    }
    
    public void shutDown()
    {
        LOGGER.info("Memory is shutDown...");
    }
}


外观类

/**
 * 门面类(核心)
 * @author Administrator
 *
 */
public class Computer
{
    public static final Logger LOGGER = Logger.getLogger(Computer.class);
    
    private CPU cpu;
    private Memory memory;
    private Disk disk;
    public Computer()
    {
        cpu = new CPU();
        memory = new Memory();
        disk = new Disk();
    }
    public void start()
    {
        LOGGER.info("Computer start begin");
        cpu.start();
        disk.start();
        memory.start();
        LOGGER.info("Computer start end");
    }
    
    public void shutDown()
    {
        LOGGER.info("Computer shutDown begin");
        cpu.shutDown();
        disk.shutDown();
        memory.shutDown();
        LOGGER.info("Computer shutDown end...");
    }
}

客户端调用


/**
 * 客户端类
 * @author Administrator
 *
 */
public class Cilent {
    public static final Logger LOGGER = Logger.getLogger(Cilent.class);
    public static void main(String[] args) 
    {
        Computer computer = new Computer();
        computer.start();
        LOGGER.info("=================");
        computer.shutDown();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值