好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Facade外观模式

Facade外观模式

   1.理论定义

        外观模式   把  分散的子系统,集合成一个系统,提供一站式服务。

   2.应用举例

          需求描述: 聂小倩 和 宁采臣是一对小富则安 的聊斋夫妻。住在比较偏远的小乡村。

                         今天,两人初次来到大城市广州,听说天河城提供一站式服务,不像小城市那样,买个东西  得  东奔西跑。

                         在一个地方,就可以买到 自己想要的衣服,电脑,鞋子,Iphone,还可以看大片,

                         吃冰淇淋,吃真功夫,买化妆品,珠宝首饰。天河城,果然是一宝地啊。

                         Ok,边走边看。      

   3.具体编码

          1.阿迪达斯

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
     ///   <summary> 
    ///   阿迪达斯
     ///   </summary> 
     public    class   Adidas
    {
          public   void  Serivce( string   something) {
            Console.WriteLine(  "  在阿迪达斯购买了:   " + something);
        }
    }
} 

     2.飞扬影城

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   飞扬影城
      ///   </summary> 
     public    class   FeiYangMovie
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在飞扬影城看了一部电影:   "  +  something);
        }
    }
} 

3.国美电器

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   国美电器
      ///   </summary> 
     public   class   GoMe
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在国美电器 买了:   "  +  something);
        }
    }
} 

4.哈根达斯

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   哈根达斯
      ///   </summary> 
     public   class   HaagenDaz
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在哈根达斯 买了:   "  +  something);
        }
    }
} 

5.真功夫

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   真功夫
      ///   </summary> 
     public   class   KungFu
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在真功夫 吃了:   "  +  something);
        }
    }
} 

6.六福珠宝

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   六福珠宝
      ///   </summary> 
     public   class   LukFook
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在六福珠宝 买了:   "  +  something);
        }
    }
} 

7.耐克

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   耐克
      ///   </summary> 
     public   class   NIKE
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在耐克店 买了:   "  +  something);
        }
    }
} 

8.ONLY

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   ONLY时装
      ///   </summary> 
     public   class   ONLY
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在ONLY时装 买了:   "  +  something);
        }
    }
} 

9.苏宁电器

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   苏宁电器
      ///   </summary> 
     public   class   Suning
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(  "  在苏宁电器 买了:   "  +  something);
        }
    }
} 

10.Veromoda国际时装品牌

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   Veromoda国际时装品牌
      ///   </summary> 
     public   class   Veromoda
    {
          public   void  Serivce( string   something)
        {
            Console.WriteLine(something);
        }
    }
} 

11.消费者

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Com.Design.Gof.Facade
{
      ///   <summary> 
     ///   消费店子
      ///   </summary> 
     public   enum   ShopOption
    {
        Adidas  =  1 , DKNY =  2 , GoMe =  3  ,
        NIKE  =  4 , Suning =  5 , Veromoda =  6  ,
        FeiYangMovie  =  7 , HaagenDaz =  8 , LukFook =  9 , KungFu =  10  
    }
      ///   <summary> 
     ///   消费单
      ///   </summary> 
     public   class   Bill {
          ///   <summary> 
         ///   要去的消费店
          ///   </summary> 
         public  ShopOption Item {  get ;  set  ; }
          ///   <summary> 
         ///   去这个店要买啥
          ///   </summary> 
         public   string  Something {  get ;  set  ; }
    }
      public   class   Consumer
    {
          ///   <summary> 
         ///   消费单
          ///   </summary> 
         public  IList<Bill> Items {  get ;  set  ; }
         ///   <summary>  
/// 姓名
/// </summary> public string Name { get ; set ; } } }

12.天河城---一站式服务

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;
  using   System.Reflection;
  namespace   Com.Design.Gof.Facade
{
     ///   <summary> 
    ///   天河城
     ///   </summary> 
     public   class   TeeMall
    {
          private   static   readonly  Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory +  @"  \Com.Design.Gof.dll  "  );
          ///   <summary> 
         ///   一站式服务
          ///   </summary> 
         ///   <param name="consumer"></param> 
         public   void   OfferService(Consumer consumer) {
            Console.WriteLine(  "  我是:   "  + consumer.Name+ "  ,不差钱,今天来天河城玩:   "  );
            Console.WriteLine(  "  ----------------------------------------------  "  );
              foreach  (Bill item  in   consumer.Items)
            {
                 object  obj= assembly.CreateInstance( "  Com.Design.Gof.Facade.  "  +  item.Item);
               MethodInfo info  =  obj.GetType().GetMethod( "  Serivce  "  );
               info.Invoke(obj,   new   object  [] { item.Something });
            }
            Console.WriteLine();
        }
    }
} 

13.主函数调用

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;
  using   Com.Design.Gof.Facade;
  namespace   Com.Design.Gof.Test
{
      class   Program
    {
        
          static   void  Main( string  [] args)
        {
              //  天河城购物中心 
            TeeMall TeeMall =  new   TeeMall();

              //  消费者 1 
            Consumer consumer =  new   Consumer
            {  
                Name = "  聂小倩  "  ,
                  //  消费单 
                Items =  new   List<Bill>  { 
                    new  Bill{ Item=ShopOption.Adidas, Something= "  运动服  "  },
                    new  Bill{ Item=ShopOption.GoMe, Something= "  苹果IPhone智能手机  "  },
                    new  Bill{ Item=ShopOption.FeiYangMovie, Something= "  <冰河世纪 4>  "  },
                    new  Bill{ Item=ShopOption.KungFu, Something= "  香菇炖鸡  "  },
                      new  Bill{ Item=ShopOption.LukFook, Something= "  金项链  "  },
                }
            };

            TeeMall.OfferService(consumer);
             //  消费者 2 
           consumer =  new   Consumer
           {
               Name  =  "  宁采臣  "  ,
                 //  消费单 
               Items =  new  List<Bill>  { 
                    new  Bill{ Item=ShopOption.FeiYangMovie, Something= "  《太空一号》  "  },
                    new  Bill{ Item=ShopOption.Veromoda, Something= "  然后去了Veromoda时装,买了一套服装  "  },
                    new  Bill{ Item=ShopOption.HaagenDaz, Something= "  买了一雪糕  "  },
                    new  Bill{ Item=ShopOption.Suning, Something= "  在苏宁看买平板电脑  "  },
                } 
           };
           TeeMall.OfferService(consumer);
           Console.ReadKey();
        }

    }
} 

14.运行结果

15.总结

  天河城 TeeMall 理论上应该包括 所有 商场的引用,

  这里用反射 避免了这一动作。

  附件里面包括了程序源码。

  这里是附件 下载(Download)

 

分类:  c# ASP.NET

标签:  设计模式 ,  c#设计模式 ,  .NET设计模式 ,  设计模式系列 ,  Facade ,  外观模式

当前标签: c#设计模式

 

C#设计模式系列 9 ----Facade外观模式之--天河城购物

 

C#设计模式系列 8 ----Builder 生成器模式之--发工资了,带老婆到 岗顶百脑汇配置电脑

 

C#设计模式系列 7 ----Template 模板方法模式之--ASP.NET自定义控件 密码强度检测

 

C#设计模式系列 6 ----State 状态模式 之--电视36计,我要自己掌握遥控器

 

C#设计模式系列 5 ----Mediator 中介者模式 之 程序员的七夕缘分

 

C#设计模式系列 4 ----Visitor 访问者模式 之--长隆欢乐世界

 

C#设计模式系列 3 ----Strategy 策略模式 之--007大破密码危机

 

C#设计模式系列 2 ----ChainOfResponsibility 职责链模式之--真假美猴王

 

C#设计模式系列 1 ----Observer 观察者模式 之 牛顿童鞋 的成绩

 

 

 

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Facade外观模式的详细内容...

  阅读:58次