您的位置:首页 > 其它

外观模式

2015-12-27 15:54 162 查看
师傅说在个人机房重构的时候至少要用到抽象工厂模式和外观模式,那么外观模式一定很基础啦,因此把外观模式总结一下,加深印象,为以后铺好路吧(其实是这周博客不知道写啥了



那么什么是外观模式呢?

外观模式为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式结构图如下:




下面以股民炒股为例来解释外观模式,新股民在没有足够了解证券知识的情况下很容易亏钱,而通过基金由专业经理人管理则是一条很好的选择,在编程中,就是众多股民只和基金打交道,而实际操作交由基金经理人来完成,从而避免了股民和股票耦合性过高的弊端。

namespace 外观模式
{
    class Program
    {
        static void Main(string[] args)
        {
            //股民对股票的购买售出由基金完成
            Fund jijin = new Fund();
            //基金购买
            jijin.BuyFund();
            //基金赎回
            jijin.SellFund();
            Console.Read();
        }
    }
    //股票类
    class Stock1
    {
        //卖股票
        public void Sell()
        {
            Console.WriteLine("股票1卖出");
        }
        //买股票
        public void Buy()
        {
            Console.WriteLine("股票1买入");
        }
    }
    class Stock2
    {
        //卖股票
        public void Sell()
        {
            Console.WriteLine("股票1卖出");
        }
        //买股票
        public void Buy()
        {
            Console.WriteLine("股票1买入");
        }
    }
    class Stock3
    {
        //卖股票
        public void Sell()
        {
            Console.WriteLine("股票1卖出");
        }
        //买股票
        public void Buy()
        {
            Console.WriteLine("股票1买入");
        }
    }
    //基金类,了解所有的股票的方法和属性,以备外界调用
    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、在设计初期阶段,应该要有意识的将不同的两个层分离,在层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。(不久就要用到了)

2、在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。

3、在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,这时可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: