设计模式之------外观模式(Facade Pattern)

一、概念

①、什么是外观模式?

       外观模式(Facade)亦称为“过程模式”,为子系统中的一组接口提供一个一致的界面,这个外观类为子系统提供一个共同的对外接口,客户对象通过一个外观接口读写子系统中各接口的数据资源。

②、什么情况下用外观模式?

      (1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。

      (2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。

      (3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

③、外观模式的作用?

      (1)实现了子系统与客户端之间的松耦合关系。

      (2)客户端屏蔽了系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

④、外模模式的具体应用?

      三层向七层的转换。

二、图

①、外观模式结构图

②、拓展图

③、购买基金外观模式类图

三、代码

①、代码类图

②、代码

                                          //客户不用看到内在的运作,直接看到外表的展示结果即可。
    class Program
    {
        static void Main(string[] args)
        {
            Fund fund = new Fund();          //用Fund类实例化对象fund,其实是调取了Fund类中的构造函数,实例化了所有基金类控制下的股票,国债,房地产对象。
            fund.BuyFund();                  //调取fund对象的BuyFund()方法,其实是调取了fund对象中所有子系统的Buy方法
            fund.SellFund();                 //调取fund对象的SellFund()方法
            Console.ReadKey();
        }
    }
                                             //Fund类中引用了所有的子系统(股票,国债,房地产),客户端调取Fund类时,Fund类调取各个子系统。
    class Fund
    { 
        Stock1 gu1;                          //声明了一个Stock1类型的变量gu1,没有new的时候值默认为null,只是占用了指针的位置,没有另外开辟空间
        Stock2 gu2;                          //在Fund类中引用了Stock2对象,这是Fund类与Stock2类建立关联的代码表现。
        Stock3 gu3;
        NationalDebt1 gz1;
        Realty1 fdc1;

        public Fund()                        //当Fund类在实例化时触发此方法
        {
            gu1 = new Stock1();              //给Stock1类型的变量gu1,开辟内存空间,创建实例。
            gu2 = new Stock2();
            gu3 = new Stock3();
            gz1 = new NationalDebt1();
            fdc1 = new Realty1();
        }

        public void BuyFund()
        {
            gu1.Buy();                       //调取gu1对象的Buy()方法
            gu2.Buy();
            gu3.Buy();
            gz1.Buy();
            fdc1.Buy();           
        }

四、拓展类

①、门面模式(很棒的一篇文章)

https://www.cnblogs.com/lthIU/p/5860607.html

②、类+类名;什么意思?

https://zhidao.baidu.com/question/876882503033761852.html

以上便是外观模式的初步梳理,继续前行^_^

猜你喜欢

转载自blog.csdn.net/Elsa15/article/details/87875596