【设计模式&C#】外观模式(用于解决客户端对系统的许多类进行频繁沟通)

一种结构性设计模式。
特点是将复杂的子系统调用逻辑封装到一个外观类,从而使客户端更容易与系统交互。
优点:

  1. 简化了接口的调用;
  2. 降低了客户端与子系统的耦合度;
  3. 封装了子系统的逻辑。

缺点:

  1. 引入了额外的类,可能会增加不必要的复杂性;
  2. 不适合需要频繁修改的系统。
  3. 外观类承担的职责过多

适合的场景:

  1. 家庭影院系统;
  2. 网络服务端的连接;
  3. 数据库的访问。
cs 复制代码
//Car类,即外观类
using System;

public class Car
{   
    //车辆的各个部件
    private Engine engine = new Engine();//引擎
    private Door door = new Door();//车门
    private Light light = new Light();//车灯

    //启动车辆
    public void Start()
    {   
        //启动车门
        door.Open();
        //启动引擎
        engine.StartEngine();
        //启动车灯
        light.TurnOnLight();
    }

    //停止车辆
    public void Stop()
    {
        //关闭车灯
        light.TurnOffLight();
        //关闭引擎
        engine.StopEngine();
        //关闭车门
        door.Close();
    }
}
cs 复制代码
//引擎
public class Engine
{
    /// <summary>
    /// 启动游戏引擎
    /// </summary>
    public void StartEngine()
    {
        Console.WriteLine("Game engine started.");
    }

    /// <summary>
    /// 停止游戏引擎
    /// </summary>
    public void StopEngine()
    {
        Console.WriteLine("Game engine stopped.");
    }
}
cs 复制代码
//车门
public class Door
{
    /// <summary>
    /// 开启车门
    /// </summary>
    public void Open()
    {
        Console.WriteLine("Door is opening");
    }

    /// <summary>
    /// 关闭车门
    /// </summary>
    public void Close()
    {
        Console.WriteLine("Door is closing");
    }
}
cs 复制代码
//车灯
public class Light
{
    /// <summary>
    /// 开灯
    /// </summary>
    public void TurnOnLight()
    {
        Console.WriteLine("open car light");
    }

    /// <summary>
    /// 关灯
    /// </summary>
    public void TurnOffLight()
    {
        Console.WriteLine("close car light");
    }
}
cs 复制代码
//客户端
public class Client
{   
    //客户端调用
    public static void Main(string[] args)
    {   
        //创建车辆实例
        Car car = new Car();
        //启动车辆
        car.Start();
        //停止车辆
        car.Stop();
    }
}
相关推荐
FL16238631296 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
love530love8 小时前
OpenClaw 手机直连配置全流程
人工智能·windows·python·智能手机·c#·agent·openclaw
bcbobo21cn9 小时前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型
月巴月巴白勺合鸟月半11 小时前
一次PDF文件的处理(一)
pdf·c#
大鹏说大话13 小时前
Java 锁膨胀机制深度解析:从偏向锁到重量级锁的进化之路
开发语言·c#
武藤一雄15 小时前
WPF处理耗时操作的7种方法
microsoft·c#·.net·wpf
武藤一雄15 小时前
C#常见面试题100问 (第一弹)
windows·microsoft·面试·c#·.net·.netcore
庞轩px15 小时前
HotSpot详解——符号引用、句柄池、直接指针的终极解密
java·jvm·设计模式·内存·虚拟机·引用·klass
l1t17 小时前
DeepSeek总结的用 C# 构建 DuckDB 插件说明
前端·数据库·c#·插件·duckdb
Yu_Lijing17 小时前
基于C++的《Head First设计模式》笔记——责任链模式
c++·笔记·设计模式·责任链模式