<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Factory Method 工廠方法模式(創建型模式)

           定義一個用于創建對象的接口,讓子類決定實例化哪一個類。Factory Method使得一個類的實例話延遲到子類。
                                                                  ———《設計模式》GoF

           在接口IDAL層定義一個接口,該接口中方法表示發送不同短信消息。
       //定義一個接口
          public interface IMessage
          
      {
              
      void SendMessage
      (object Msg);    //用于發送短信內容
          }
           
           在SERVER層實現IDAL的接口,一個用來發送天氣預報短信,一個用來發送新聞短信。
      public class WeatherSMS : IMessage
          
      {
              
      public void SendMessage(object msg)
              
      {
                  Console.WriteLine(
      "發送給定制天氣預報短信業務的客戶:{0};", msg);
              }

          }
       public class NewsSMS : IMessage
          
      {
              
      public void SendMessage(object msg)
              
      {
                  Console.WriteLine(
      "發送給定制新聞短信業務的客戶:{0};", msg);
              }

          }

            創建IDAL的工廠:
      public interface IMessageFactory
          
      {
              IMessage Create();
          }

      public class WeatherSMSFactory : IMessageFactory
          
      {
              
      public IMessage Create()
              
      {
                  
      return new WeatherSMS();
              }

          }

      public class NewsSMSFactory : IMessageFactory
          
      {
              
      public IMessage Create()
              
      {
                  
      return new NewsSMS();
              }

          }
            
            實現DAL的工廠:
      static class MessageUtility
          
      {
              
      public static IMessageFactory weather = new WeatherSMSFactory();   //實現天氣預報短信的發送
              public static IMessageFactory news = new NewsSMSFactory();         //實現新聞短信的發送
          }
           
          業務BLL層的方法;
           發送新聞短信:
      public class BussinessNews
          
      {
             
              
      public BussinessNews()
              
      {

              }


              IMessage message 
      = MessageUtility.news.Create();

              
      public void send(object obj)
              
      {
                  message.SendMessage(obj);
              }

          }
           發送天氣預報短信:
      public class BussinessWeather
          
      {

              
      public BussinessWeather()
              
      {

              }


              IMessage message 
      = MessageUtility.weather.Create();

              
      public void send(object obj)
              
      {
                  message.SendMessage(obj);
              }

          }

           實現:
      class Program
          {
              
      static void Main(string[] args)
              {
                  BussinessNews bn 
      = new BussinessNews();
                  bn.send(
      "新聞短信發送成功!");

                  BussinessWeather bw 
      = new BussinessWeather();
                  bw.send(
      "天氣預報短信發送成功!");
              }
          }

      也可以不創建IDAL工廠模型來實現,可以使用反射技術來實現在SERVER層實現IDAL的接口,使用反射減少了很多代碼,但是程序的效率會有所下降。

       反射介紹:Assembly類是在System.Reflection命名空間中定義的,他允許訪問給程序集的元數據,它也包含可以加載和執行程序集(假定該程序集是可執行的)的方法。與Type類一樣,Assembly類包含非常多的方法和屬性。在使用Assembly實例做一些工作前,需要把相應的程序集加載到運行過程中,為此,可以使用靜態成員Assembly.Load()或者Assembly.LoadFrom()。這兩個方法的區別是Load()參數是程序集的名稱,運行庫會在各個位置上搜索該程序集,這些位置包括本地目錄和全局程序集高速緩存。而LoadFrom()的參數是程序集的完整路徑名,不會在其他位置搜索該程序集。

      反射代碼:
      using System;
      using System.Collections.Generic;
      using System.Text;
      using System.Reflection;

      namespace ClassLibrary1
      {
          
      class Reflection
          
      {
              
      private static readonly string path = "ClassLibrary1";
              
      private static object CreateObjectNoCache(string path, string CacheKey)
              
      {
                  
      try
                  
      {
                      
      object objType = Assembly.Load(path).CreateInstance(CacheKey);
                      
      return objType;
                  }

                  
      catch
                  
      {
                      
      return null;
                  }


              }


              
      public static ClassLibrary1.IMessage CreateNews()
              
      {
                  
      string CacheKey = path + ".NewsSMS";
                  
      object objType = CreateObjectNoCache(path, CacheKey);
                  
      return (ClassLibrary1.IMessage)objType;
              }


              
      public static ClassLibrary1.IMessage CreateWeather()
              
      {
                  
      string CacheKey = path + ".WeatherSMS";
                  
      object objType = CreateObjectNoCache(path, CacheKey);
                  
      return (ClassLibrary1.IMessage)objType;
              }

          }

      }


      那么業務類BLL修改為:
      發送新聞的業務類
      public class BussinessNews
          
      {
             
              
      public BussinessNews()
              
      {

              }


              
      private readonly IMessage message = Reflection.CreateNews();
              
      public void send(object obj)
              
      {
                  message.SendMessage(obj);
              }

          }
        發送天氣預報的業務類
      public class BussinessWeather
          
      {
              
      private readonly IMessage message = Reflection.CreateWeather();
              
      public BussinessWeather()
              
      {

              }


              
      public void send(object obj)
              
      {
                  message.SendMessage(obj);
              }

          }

      實現:
       class Program
          
      {
              
      static void Main(string[] args)
              
      {
                  BussinessNews bn 
      = new BussinessNews();
                  bn.send(
      "新聞短信發送成功!");

                  BussinessWeather bw 
      = new BussinessWeather();
                  bw.send(
      "天氣預報短信發送成功!");
              }

          }


           
      posted @ 2008-02-29 17:06  love .net FrameWork  閱讀(1955)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 中文字幕无码人妻aaa片| 贵溪市| 又大又粗又爽的少妇免费视频| 国产精品第一二三区久久| 亚洲男人的天堂在线观看| 平遥县| 欧美日韩国产图片区一区| 国产成人一区二区三区免费| 老熟妇仑乱一区二区视頻| 成人国产精品三上悠亚久久| 国产老妇伦国产熟女老妇高清| 欧美成人www免费全部网站 | 国产乱人伦偷精品视频下| 欧美日韩中文国产一区| 色诱视频在线观看| 成人拍拍拍无遮挡免费视频| 国产女精品视频网站免费| 干老熟女干老穴干老女人| 少妇熟女久久综合网色欲| 亚洲精品久久久久国产| 光棍天堂在线手机播放免费| 久草网视频在线观看| 烟台市| 中文字幕av无码一区二区蜜芽三区| 麻豆最新国产AV原创精品| 好爽毛片一区二区三区四| 蜜臀精品国产高清在线观看| 成在线人免费视频| 色偷偷中文在线天堂中文| 日本中文字幕久久网站| 邵阳县| 精品91在线| 亚洲日韩VA无码中文字幕| 中文字幕在线精品人妻| 志丹县| 丰满高跟丝袜老熟女久久| 另类 专区 欧美 制服| 日韩高清国产中文字幕| 欧洲码亚洲码的区别入口| 亚洲国产欧美在线人成大黄瓜| √8天堂资源地址中文在线|