前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重温设计模式 --- 外观模式

重温设计模式 --- 外观模式

作者头像
Niuery Diary
发布2023-10-22 16:38:39
1550
发布2023-10-22 16:38:39
举报

引言

外观模式是一种结构型设计模式,它为客户端提供了一个简单的接口,使得客户端能够更容易地使用复杂的子系统。外观模式通过隐藏子系统的复杂性,简化了客户端的调用过程,同时也降低了客户端与子系统的耦合度。

外观模式的核心思想是将系统的各个组件和子系统封装在一个单独的类中,称为外观类。外观类为客户端提供一个简单的接口,隐藏了系统的复杂性。客户端只需要与外观类交互,就可以使用系统的所有功能。

将外观模式具象化可以这样理解,假设我们有一个汽车工厂,它可以生产各种型号的汽车。生产一辆汽车需要很多步骤,比如设计、采购零件、组装等等。如果客户端要使用汽车工厂生产一辆汽车,那么他需要了解所有这些步骤的细节,这会使得客户端非常复杂。但是如果我们在汽车工厂的外面加上一个售车大厅,这个售车大厅就是外观。客户端只需要在售车大厅告诉售货员他想要什么型号的汽车,然后售货员会帮他完成所有的操作。这样客户端就可以很方便地使用汽车工厂了。

接下来,我们使用C#实现上文描述的外观模式。

子系统类

创建设计师类采购部类组装车间类

代码语言:javascript
复制
public  class  Designer
{
    public void Design()
    {
        //Design a car..
    }
}

public  class  PurchasingDepartment
{
    public void Purchase()
    {
        //Purchase car parts..
    }
}

public  class  AssemblyWorkshop
{
    public void Assemble()
    {
        //Assemble car..
    }
}

外观类

创建外观类:

代码语言:javascript
复制
public  class  CarFacade
{
    private Designer designer;
    
    private PurchasingDepartment purchasingDepartment;
    
    private AssemblyWorkshop assemblyWorkshop;

    public CarFacade()
    {
        designer = new();
        
        purchasingDepartment = new();
        
        assemblyWorkshop = new();
    }

    public void Operation()
    {
        designer.Design();
        
        purchasingDepartment.Purchase();
        
        assemblyWorkshop.Assemble();
        
        //othre Operation ..
    }
}

这样,客户端需要一辆车的时候,只需要这样

代码语言:javascript
复制
Facade facade = new Facade();

facade.Operation();

上述示例中,DesignerPurchasingDepartmentAssemblyWorkshop是三个子系统类,CarFacade是外观类,CarFacade封装了子系统的复杂性,为客户提供了一个简单的接口Operation,而无需了解其实现细节。

结论

外观模式通常用于大型系统中,其中有多个子系统相互依赖,而客户端只需要使用其中一小部分功能。 它可以帮助客户端更容易地使用这些功能,而无需了解子系统的所有细节。 它通过将客户端代码与复杂的子系统代码解耦,简化了客户端与子系统之间的交互。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Niuery Diary 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
    • 子系统类
      • 外观类
      • 结论
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档