(超详细,超易懂)设计模式(十一):外观模式,师兄弟组队去旅行

如果你也喜欢C#开发或者.NET开发,可以关注我,我会一直更新相关内容,并且会是超级详细的教程,只要你有耐心,基本上不会有什么问题,如果有不懂的,也可以私信我加我联系方式,我将毫无保留的将我的经验和技术分享给你,不为其他,只为有更多的人进度代码的世界,而进入代码的世界,最快捷和最容易的就是C#.NET,准备好了,就随我加入代码的世界吧!

一、简介

        外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问系统中的一组接口。外观模式隐藏了系统的复杂性,让客户端可以通过一个简单的接口来操作系统。

        外观模式通过定义一个高层接口,来封装一系列子系统的复杂操作。客户端只需要通过外观对象来与子系统进行交互,无需了解子系统的具体实现。

        外观模式的主要目的是简化系统的接口,将客户端与系统的耦合度降到最低。通过使用外观模式,客户端可以通过同一接口来调用系统的不同子系统,而不需要了解子系统之间的细节。

二、为什么要学习外观模式

        2.1 简化复杂系统

        外观模式提供了一个简单的接口来访问复杂系统的子系统,使得系统更易于使用。它隐藏了子系统的复杂性,使得客户端可以通过简单的接口来与子系统进行交互。

        2.2 解耦系统

        外观模式将子系统与客户端分离开来,使得它们可以独立地演化和修改。这种解耦可以提高系统的灵活性和可维护性。

        2.3 提供高层次接口

        外观模式可以提供一个高层次的接口,使得客户端可以更加方便地使用系统。它将多个复杂的操作封装在一个简单的接口中,简化了客户端的代码。

        2.4 隐藏实现细节

        外观模式可以隐藏系统的实现细节,使得客户端不需要了解子系统的内部工作原理。这样可以降低客户端的复杂性,并且可以保护系统的安全性。

三、外观模式在项目中有哪些实际应用

        3.1 图形界面库

        图形界面库通常有很多复杂的类和方法,使用外观模式可以提供一个简单的接口来控制图形界面的各个组件,让使用者更容易使用。

        3.2 文件读写库

        文件读写涉及到的类和方法很多,使用外观模式可以提供一个简单的接口来读取和写入文件,隐藏底层的实现细节,使得使用者更容易操作文件。

        3.3 网络通信库

        网络通信涉及到的类和方法也很多,使用外观模式可以提供一个简单的接口来进行网络通信,隐藏底层的网络协议和实现细节,使得使用者更容易进行网络通信。

        3.4 缓存库

        缓存库通常有很多复杂的类和方法,使用外观模式可以提供一个简单的接口来读取和写入缓存数据,隐藏底层的缓存机制和实现细节,使得使用者更容易使用缓存。

四、外观模式在代码中的实现与讲解

以西游记中的三位师兄弟旅行为例:

首先,我们有一个外观类 JourneyToFAR,它充当外观,提供给客户端一个简单的接口:

public class JourneyToFAR
{
    private Monkey monkey;
    private Pigsy pigsy;
    private Sandy sandy;

    public JourneyToFAR()
    {
        monkey = new Monkey();
        pigsy = new Pigsy();
        sandy = new Sandy();
    }

    public void BeginJourney()
    {
        monkey.StartJourney();
        pigsy.StartJourney();
        sandy.StartJourney();
    }

    public void EndJourney()
    {
        monkey.FinishJourney();
        pigsy.FinishJourney();
        sandy.FinishJourney();
    }
}

然后,我们有三个子系统类 MonkeyPigsySandy 分别表示孙悟空、猪八戒和沙悟净:

public class Monkey
{
    public void StartJourney()
    {
        Console.WriteLine("孙悟空开始了他的旅程!");
    }
  
    public void FinishJourney()
    {
        Console.WriteLine("孙悟空结束了他的旅程!");
    }
}

public class Pigsy
{
    public void StartJourney()
    {
        Console.WriteLine("猪八戒开始了他的旅程!");
    }
  
    public void FinishJourney()
    {
        Console.WriteLine("猪八戒结束了他的旅程!");
    }
}

public class Sandy
{
    public void StartJourney()
    {
        Console.WriteLine("沙悟净开始了他的旅程!");
    }
  
    public void FinishJourney()
    {
        Console.WriteLine("沙悟净结束了他的旅程!");
    }
}

最后,我们可以在客户端代码中使用外观模式:

class Program
{
    static void Main(string[] args)
    {
        JourneyToFAR journey = new JourneyToFAR();
        journey.BeginJourney();
        journey.EndJourney();
    }
}

输出结果将会是:

孙悟空开始了他的旅程!
猪八戒开始了他的旅程!
沙悟净开始了他的旅程!
孙悟空结束了他的旅程!
猪八戒结束了他的旅程!
沙悟净结束了他的旅程!

通过使用外观模式,客户端只需要使用 JourneyToFAR 的接口来开始和结束一次旅程,而不需要关心具体的子系统类和它们的操作细节。

五、外观模式需要注意的地方

        5.1 保持外观类的简单性

        外观类应尽可能的简单,只包含必要的接口,不应该包含过多的业务逻辑。外观类的目的是提供一个简单的接口,隐藏复杂的系统内部结构。

        5.2 不要滥用外观模式

        外观模式适用于复杂的系统,但不要滥用。如果系统本身没有复杂性,或者系统的复杂性并不变化,使用外观模式可能会引入不必要的复杂性。

        5.3 协调子系统的关系

        外观类需要协调子系统的不同部分之间的关系,并将其封装在一个简单的接口中。因此,外观类需要了解各个子系统的接口和功能。

        5.4 子系统的修改可能会影响外观类

        如果子系统的接口发生变化,外观类也需要相应地进行修改。因此,在设计外观模式时需要考虑子系统的稳定性。

        5.5 可以有多个外观类

        一个系统可以有多个外观类,每个外观类负责一组相似的子系统。这可以提高系统的灵活性和可扩展性。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值