精华内容
下载资源
问答
  • 外观模式

    热门讨论 2016-01-29 20:41:14
    外观模式,何时使用外观模式外观模式结构图以及结构图

    外观模式:

         为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。是我脑子笨还是什么原因,看定义总是会被绕进去,还好有外观的结构图还有例子比较容易理解。

    上代码:

        代码中股票、国债、实体产权是具体的子系统,外观模式为他们提供一个Fund外观类——界面、接口,该类了解所有子系统的方法和属性,因此能够将客户的请求传递给适当的子系统。

      class Program
        {
            //客户端,用户不需要了解股票等具体子类
            //买了基金之后不需要关心集体操作
            //由基金类将客户请求代理给适当的子系统对象
            static void Main(string[] args)
            {
                Fund jj = new Fund();
                jj.BuyFundd();
                jj.SellFund();
                Console.Read();
            }
        }
        #region 具体子类
        //子类中无父类的信息,没有引用父类
        class Stock1
     {
         public void Sell()
         {
             Console.WriteLine("股票1卖出");
         }
         public void Buy()
         {
             Console.WriteLine("股票1买入");
         }
     }
     class Stock2
     {
         public void Sell()
         {
             Console.WriteLine("股票2卖出");
         }
         public void Buy()
         {
             Console.WriteLine("股票2买入");
         }
     }
     class NationalDebt1
     {
         public void Sell()
         {
             Console.WriteLine("国债3卖出");
         }
         public void Buy()
         {
             Console.WriteLine("国债3买入");
         }
     }
    class Realty1
    {
        public void Sell()
        {
            Console.WriteLine("舍弃工厂");
        }
        public void Buy()
        {
            Console.WriteLine("拥有工厂");
        }
    }
        #endregion
    /// <summary>
        /// 基金类,需要了解所有股票、国债
        /// 的方法、属性
        /// </summary>
        class Fund
        {
            Stock1 ST1;
            Stock2 ST2;
            NationalDebt1 ND;
            Realty1 RY;
            public Fund ()
            {
                ST1 = new Stock1();
                ST2 = new Stock2();
                ND = new NationalDebt1();
                RY = new Realty1();
            }
            public void BuyFundd()
            {
                ST1.Buy();
                ST2.Buy();
                ND.Buy();
                RY.Buy();
            }
            public void SellFund()
            {
                ST1.Sell();
                ST2.Sell();
                ND.Sell();
                RY.Sell();
            }
            
        }

    应用场合:

    1、设计初期,有意识将不同的两个层分离,层与层间建立外观Facade,为复制子系统提供简单接口,降低耦合度。

    2、开发阶段,新增、修改内容增加子系统的复杂度,增加外观Facade提供简单接口,减少相互间的依赖。

    3、维护遗留的大型含有重要功能的系统时,为新系统增加一个外观Facade类,为遗留代码提供清晰的接口,让新系统与Facade交互,Facade与遗留代码交互。

    结构图:


    一张图胜过千言万语。

    thanks for your time。

    展开全文
  • 设计模式之外观模式

    2021-03-19 10:47:26
    外观模式 Design Patterns - Facade Pattern 外观设计模式 学习这个模式的时候让我想起了阿基米德的一句话:“给我一个支点,我可以把地球撬动起来”,这句话用在外观设计模式上最恰当不过。因为外观设计模就是一个...

    参考资料:
    外观模式
    Design Patterns - Facade Pattern
    外观设计模式

    学习这个模式的时候让我想起了阿基米德的一句话:“给我一个支点,我可以把地球撬动起来”,这句话用在外观设计模式上最恰当不过。因为外观设计模就是一个“以小博大”的“快捷键”模式。因为它的定义就是:“隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口”。这句话可以这么理解:“仅仅通过一个接口,就可以访问隐藏了复杂细节的系统!”. 这不就是以小博大嘛!

    如果还不了外观模式的意图,想想如下几个问题:
    1、你启动汽车的时候是不是仅仅需要一枚钥匙就可以了?你需要了解发动机内部是怎么操作的吗?
    2、你开启手机或者电脑的时候,是不是只需要按下开机键就可以了?需要知道电脑或者手机具体怎么启动的吗?
    3、打开一个APP,是不是简单的点一下启动icon可以了?需要了解APP的启动细节吗?(我要硬刚一波:面试的时候需要知道APP的启动流程,特别是头条面试,好像是必问的问题).

    通过上面几个问题可以知道,外观模式融合了复杂系统的子系统,并且为客户提供了一个简单的接口,这个简单的接口其实就是方便用户使用的接口。 简而言之,与直接调用子系统相比, 外观提供的功能可能比较有限, 但它却包含了客户端真正关心的功能。

    事实上,外观模式的优点不止如此,比如因为客户端不需要了解子系统内部的细节,子系统和客户是松耦合的关系,所以子系统可以独立的升级改变而不影响客户端原有的功能。

    有了外观模式,把大象放进冰箱只需要三个步骤:打开冰箱、把大象放进冰箱里、关上冰箱。如果没有外观模式,你把大象放进冰箱里的第一步就是你得学会怎么把冰箱组装好,这可不是我们需要关心的工作。我们客户端问题的本质就是把大象放进冰箱里而已。

    外观模式其实从代码构建来说没有一个统一的模板,与其说是模式,不如说是一个思想,核心就是“隐藏复杂细节,暴露出客户需要的接口,总得来说外观模式其实就是为复杂系统提供一个快捷方式”.

    展开全文
  •  外观模式 (Facade)  为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。  外观模式是一种结构型模式。  结构  图-外观模式结构图  Facade ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,163
精华内容 42,465
关键字:

外观模式的作用是