码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-外观模式的理解

时间:2015-05-03 12:05:25      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:设计模式   外观模式   

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

    在机房收费系统中,外观模式用来解除U层和B层之间的耦合,按着以前的做法,在U层中的功能调用B层中的方法的时候,就需要U层完全了解B层中的方法都有哪些,自己的U层又是需要用到哪一个方法,再调用B层中的方法。这样的做法使得B层的东西完全暴露在了U层中,而且增加了U层和B层两者的耦合程度,B层做出的修改要考虑到U层的调用的问题,不利于系统的安全性。增加的外观模式,把B层中的一组方法都放到外观类Fa?ade类中去,当U层需要调用B层的方法的时候,直接通过Fa?ade类,而不用再去完全了解B层中的方法都有哪些是自己用的。这样就定义了U层和B层之间的一个高层接口,为B层中的一组方法提供了一个一致的界面,使得B层的方法更加安全也更加容易使用了。

    用通俗的话来讲,外观模式就是归类和嵌套,把B层中的方法都归类放到Fa?ade类中,Fa?ade类自己不用定义方法,都是嵌套的B层中的方法,实现高层接口的功能。当U层需要用的时候,就可以去Fa?ade类里面找到所有的方法名,不需要知道是谁提供的这些方法,也不需要知道这些方法是怎么实现的,直接用Fa?ade类里面的方法名就可以实现自己的功能,这样大大的解除了U层和其他层之间的耦合,使得U层可以专心致志的干自己U层应该干的事,也能提高系统性能,这些好处也是设计模式的优点。

    书上的例子:炒股票和基金。没有设计模式的时候的实现过程是这样的:

class Program
    {
        static void Main(string[] args)
        {
            Stock1 stock1 = new Stock1();
            Stock2 stock2 = new Stock2();
            stock1.Buy();
            stock2.Buy();
            stock1.Sell();
            stock2.Sell ();
            Console.Read();
        }
    }
    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 Program
    {
        static void Main(string[] args)
        {
            Facade facade = new Facade();
            facade.BuyFacade();
            facade.SellFacade();
            Console.Read();
        }
    }
    class Facade
    {
        Stock1 stock1;
        Stock2 stock2;
        public Facade()
        {
            stock1 = new Stock1();
            stock2 = new Stock2();
        }
        public void BuyFacade()
        {
            stock1.Buy();
            stock2.Buy();
        }
        public void SellFacade()
        {
            stock1.Sell();
            stock2.Sell();
        }
    }
    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买进");
        }
    }
    结果同上,这个例子非常简洁,所以我只是用来说明道理,如有不当之处还请谅解。外观类Facade类中的方法的执行时根据自己需要的,如果上例中不想卖,就可以把SellFacade()方法去掉,应用的方法是灵活多变的,自己感悟很重要。

 

设计模式-外观模式的理解

标签:设计模式   外观模式   

原文地址:http://blog.csdn.net/wz537071/article/details/45457115

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!