zoukankan      html  css  js  c++  java
  • C#设计模式系列 9 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)

  • 相关阅读:
    【BZOJ2067】[Poi2004]SZN
    BZOJ4675
    [bzoj3522][bzoj4543][POI2014]HOTEL
    bzoj2969矩形粉刷
    bzoj2969矩形粉刷
    1419: Red is good
    【BZOJ2698】染色
    BZOJ5084[hashit]
    [WC2014]紫荆花之恋
    齐次常系数递推关系式
  • 原文地址:https://www.cnblogs.com/HCCZX/p/2636459.html
Copyright © 2011-2022 走看看