C#23种设计模式(四)外观模式
在C#中,外观模式(Facade Pattern)是一种结构型设计模式,旨在通过提供一个统一的接口来简化复杂子系统的使用。外观模式通过一个高层接口将多个子系统的复杂操作封装起来,客户端只需与外观类交互,无需直接处理子系统的复杂性。客户端代码仅依赖外观类,不直接调用子系统类,降低了耦合度。子系统逻辑修改时(如新增权限检查),只需调整外观类或对应子系统,客户端无需改动。子系统类专注于实现特定功能,外观
在C#中,外观模式(Facade Pattern)是一种结构型设计模式,旨在通过提供一个统一的接口来简化复杂子系统的使用。
外观模式的核心概念
-
简化接口
外观模式通过一个高层接口将多个子系统的复杂操作封装起来,客户端只需与外观类交互,无需直接处理子系统的复杂性。 -
解耦客户端与子系统
客户端代码仅依赖外观类,不直接调用子系统类,降低了耦合度。子系统的修改不会影响客户端代码。 -
职责分离
子系统类专注于实现特定功能,外观类负责协调它们的工作流程,符合单一职责原则。
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
封装子系统
组合了RegisterCourse和NotifyStudent,对外提供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("选课失败");
}
}
外观模式的优势
-
降低复杂度
客户端通过一个简单接口完成复杂操作,如选课流程中的验证和通知。 -
提高可维护性
子系统逻辑修改时(如新增权限检查),只需调整外观类或对应子系统,客户端无需改动。 -
符合设计原则
-
单一职责原则:每个子系统类负责独立功能。
-
迪米特法则:客户端只与外观类交互,减少对其他类的依赖。
-
应用场景
-
简化复杂流程
如电商系统中的下单流程(库存检查、支付、物流通知)。 -
遗留系统封装
将老旧的复杂接口包装为易用的新接口。 -
分层架构
为不同层提供统一入口,如中间件层封装数据库和缓存操作。
更多推荐


所有评论(0)