zoukankan      html  css  js  c++  java
  • c#之外观模式

    ---恢复内容开始---

    外观模式

    前言:对于一些有面对对象基础的朋友,即使我们没有听说过外观模式,也是完全有可能使用到它,因为他完美的体现了依赖倒转原则和迪米特法则,也是我们非常常用的模式之一。

    首先我们用一个故事来作为指引:不知道大家有没有炒股的经历,对于那些新手而言,往往是苦不堪言,因为对于股市的不了解或者跟风导致了连连亏损,毕竟“一入股市深似海”呀,毕竟要学习的东西实在是太多了,如果不具备这些知识的话就很难做好,而且心态也是非常的重要的,这时候我们不禁发出了感叹:要是有懂行的人就好了。

    这时候基金就是我们的好帮手呀,它可以将投资者分散的基金集中起来,交给由专业的经理人来进行管理,投资于股票,外汇,债券,而基金投资的收益由投资者所有,管理机构收取一定的托管费用。想想看:这样我们有什么好处呢?

    好处:首先当用户交给专业人士来进行管理,有了基金之后,我们只需要跟基金打交道,关心的是基金的上涨和下跌就可以了,而实际的操作人确实基金管理人在与上千只股票和其他的投资产品打交道。

    首先我们先给出股民炒股的结构图:

    基金类的代码如下(股票和国债的方法略过):

     

    //基金类
    class Fund
    {
        //三种股票的实例化
        Stock1 gu1 = new Stock1();
        Stock2 gu2 = new Stock2();
        Stock3 gu3 = new Stock3();
        //国债的实例化
        NationalDebt na=new NationalDebt();
        
        ///股票的购买
        public void BuyFund()
        {
            gu1.Buy();
            gu2.Buy();
            gu3.Buy();
            na.Buy();
        }
        //股票的卖出
        public void SellFund()
        {
            gu1.Sell();
            gu2.Sell();
            gu3.Sell();
            na.Sell();
        }
    }

     


    客户端调用代码如下:

    static void Main(string[] args)
    {
        Fund jijin=new Fund();
        //基金的购买
        jijin.BuyFund();
        //基金的卖出
        jijin.SellFund();
    }

    通过上面的例子先给出外观模式的定义:为子系统中的一组接口提供了一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易的使用。

    外观模式结构图如下:

     

     首先定义子系统类:

    //子系统类1
    class SubSystemOne()
    {
        public void MethodOne()
        {
            Console.WriteLine("子系统的方法一");
        }
    }
    
    //子系统类2
    class SubSystemTwo()
    {
        public void MethodOne()
        {
            Console.WriteLine("子系统的方法二");
        }
    }
    
    //子系统类3
    class SubSystemThree()
    {
        public void MethodOne()
        {
            Console.WriteLine("子系统的方法三");
        }
    }

    定义外观类,代码如下:

    //外观类,它需要了解所有的子系统的方法或者属性,进行组合,以备外界的调用
    class Facade
    {
        //子系统类的实例化
        SubSystemOne One=new SubSystemOne();
        SubSystemTwo Two=new SubSystemTwo();
        SubSystemThree Three=new SubSystemThree();
        
        public void MethodA()
        {
            Console.WriteLine("方法组A");
            One.MethodA();
            Two.MethodTwo();
        }
        
        public void MethodB()
        {
            Console.WriteLine("方法组B");
            One.MethodA();
        }
        
        public void MethodC()
        {
            Console.WriteLine("方法组C");
            One.MethodA();
            Two.MethodTwo();
            Three.MethodThree();
        }
    }

    客户端调用代码:

    static void Main(string[] args)
    {
        //外观类的调用
        Facade facade =new Facade();
        //方法的调用
        facade.MethodA();
        facade.MethodB();
        facade.MethodC();
        Console.ReadKey();
    }

    何时使用外观模式呢?

    首先在设计的初始阶段,应该要有意识的将不同的层分离,比如经典的三重架构,要考虑数据访问层与业务逻辑层,业务逻辑层与表示层的层与层之间建立外观模式Facade,这样就可以为复杂的子系统提供一个简单的接口,使得耦合度大大的降低。增加外观模式Facade可以提供一个简单的接口,减少他们之间的依赖,还有就是在维护一个遗留的大型系统时,可能这个系统非常的难于维护和扩展了,但是因为他包含很多重要的功能,新的需求必须要依赖于它,此时使用外观模式也是非常的合适的,你可以为你的新系统开发一个外观Facade类,来提供设计粗糙或者高度复杂的遗留代码的比较清晰的简单的接口,让新系统与Facade之间交互,Facade与遗留代码交所有复杂的工作。

    好的,写到这里就全部分析完了,大家有问题可以积极的留言呀!!

    ---恢复内容结束---

  • 相关阅读:
    FC网络学习笔记02 -网络配置方法 分类: 网络基础 2013-10-10 09:43 765人阅读 评论(0) 收藏
    FC网络学习笔记01 分类: 网络基础 2013-10-10 09:42 865人阅读 评论(0) 收藏
    CPLD/FPGA厂商概述 . 分类: 硬件开发_FPGA 2013-10-09 16:54 539人阅读 评论(0) 收藏
    @property用法总结
    python的目录
    su
    os.path.join路径拼接
    python的类变量和对象变量[转]
    python的mutable变量与immutable变量
    dataframe操作
  • 原文地址:https://www.cnblogs.com/MoRanQianXiao/p/7723261.html
Copyright © 2011-2022 走看看