ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式之十二——外观模式

2020-12-05 20:31:19  阅读:195  来源: 互联网

标签:Sell 外观 void 十二 public 门面 设计模式 子系统 客户端


  外观模式(Facade)定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。这个接口也可称作门面。

●  门面(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
●  子系统(SubSystem)角色 :可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如下面的子系统就是由Stock1、Stock2、Stock3三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。
子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已,两者是关联关系。


在这里插入图片描述

  优点:

  • 松散耦合:门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
  • 简单易用:门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
  • 更好的划分访问层次:通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

   例子背景:基金能帮助股民管理股票,交给基金来炒股的好处就是,股民不需要对市场上的股票一一进行了解,只要选择一支基金,让它来帮忙打理即可。

股票类:

    class Stock1	//股票1
    {
        public void Sell()
        {
            Console.WriteLine ("股票1卖出");
        }
        public void Buy()
        {
            Console.WriteLine("股票1买入");
        }
    }
    class Stock2	//股票2
    {
		代码类似,省略
    }
    class Stock3	//股票3
    {
		代码类似,省略
    }

基金类:统一打理股票

    class Fund
    {
        Stock1 gu1;
        Stock2 gu2;
        Stock3 gu3;

        public Fund()
        {
            gu1 = new Stock1() ;
            gu2 = new Stock2();
            gu3 = new Stock3();
        }
        public void BuyFund()	//三股一起买入
        {
            gu1.Buy();
            gu2.Buy();
            gu3.Buy();
        }
        public void SellFund()	//三股一起卖出
        {
            gu1.Sell();
            gu2.Sell();
            gu3.Sell();
        }
    }

客户端:不用了解股票1、2、3,依赖基金即可

        static void Main(string[] args)
        {
            Fund jijin = new Fund();
            jijin.BuyFund();
            jijin.SellFund();
            
            Console.Read();
        }

标签:Sell,外观,void,十二,public,门面,设计模式,子系统,客户端
来源: https://blog.csdn.net/CharmaineXia/article/details/110719031

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有