在C#中,外观模式(Facade Pattern)是一种结构型设计模式,旨在通过提供一个统一的接口来简化复杂子系统的使用。

外观模式的核心概念

  1. 简化接口
    外观模式通过一个高层接口将多个子系统的复杂操作封装起来,客户端只需与外观类交互,无需直接处理子系统的复杂性。

  2. 解耦客户端与子系统
    客户端代码仅依赖外观类,不直接调用子系统类,降低了耦合度。子系统的修改不会影响客户端代码。

  3. 职责分离
    子系统类专注于实现特定功能,外观类负责协调它们的工作流程,符合单一职责原则。

1. 子系统类 

RegisterCourse(课程注册子系统)

提供CheckAvailable方法,验证课程是否可选

public class RegisterCourse {
    public bool CheckAvailable(string name) {
        Console.WriteLine("正在验证课程{0}是否人数已满", name);
        return true;
    }
}

NotifyStudent(通知子系统)

提供Notify方法,向学生发送通知。

public class NotifyStudent {
    public bool Notify(string name) {
        Console.WriteLine("正在向{0}发送通知", name);
        return true;
    }
}
2. 外观类 RegistrationFacade

封装子系统

组合了RegisterCourseNotifyStudent,对外提供RegistrationCourse方法

public class RegistrationFacade {
    private NotifyStudent notifyStu;
    private RegisterCourse registerCourse;

    public RegistrationFacade() {
        registerCourse = new RegisterCourse();
        notifyStu = new NotifyStudent();
    }

    public bool RegistrationCourse(string name, string stuName) {
        if (!registerCourse.CheckAvailable(name))
            return false;
        return notifyStu.Notify(stuName);
    }
}
  • 职责:协调课程验证和通知发送,形成一个完整的选课流程。

  • 简化调用:客户端只需调用一个方法,无需关注内部逻辑。

3. 客户端调用(Program类 )

直接与外观类交互,无需了解子系统细节。

public override void Open() {
    if (facade.RegistrationCourse("设计模式", "Lear")) {
        Console.WriteLine("选课成功");
    } else {
        Console.WriteLine("选课失败");
    }
}

外观模式的优势

  1. 降低复杂度
    客户端通过一个简单接口完成复杂操作,如选课流程中的验证和通知。

  2. 提高可维护性
    子系统逻辑修改时(如新增权限检查),只需调整外观类或对应子系统,客户端无需改动。

  3. 符合设计原则

    • 单一职责原则:每个子系统类负责独立功能。

    • 迪米特法则:客户端只与外观类交互,减少对其他类的依赖。

应用场景

  • 简化复杂流程
    如电商系统中的下单流程(库存检查、支付、物流通知)。

  • 遗留系统封装
    将老旧的复杂接口包装为易用的新接口。

  • 分层架构
    为不同层提供统一入口,如中间件层封装数据库和缓存操作。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐