日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
.NET簡談設(shè)計模式之抽象工廠模式

今天要講的是設(shè)計模式中經(jīng)常被用到的“工廠模式”,所謂工廠模式就是將對象的創(chuàng)建交給一個叫做工廠的對象來統(tǒng)一進(jìn)行處理。主要是將對象的依賴關(guān)系進(jìn)行解耦,消除對象之間的直接耦合。那么工廠的使用有幾種方式呢?那就要看我們對工廠的理解了,工廠是創(chuàng)建對象的一個邏輯名稱,工廠可以是一個方法、一個靜態(tài)類等等。只要起到對象的創(chuàng)建就能給它賦予上一個工廠的名稱。

目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、萬安網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

  那么什么是抽象工廠呢?我想很多人對它的理解并不是很透徹,甚至有的人就覺得工廠一定要是抽象的。我表示不理解,一個抽象類中連一個抽象的、虛的成員都沒有,我想問這個類是干什么用的,僅僅是模仿《設(shè)計模式》中的例子在做嗎。我想通過這篇文章能將工廠模式的各種應(yīng)用方式進(jìn)行講解清楚,好讓不太清楚的朋友能正確的認(rèn)識到OOP的本質(zhì)。

  我們先來理清工廠模式的本質(zhì)是什么,它出現(xiàn)的目的是什么,只有對它有個正確的認(rèn)識才能引導(dǎo)我們?nèi)フ_的理解。

  工廠模式:提供創(chuàng)建對象的接口。

  這短短的一句話就概括了工廠的真正本意。在使用模式的時候,我們要適當(dāng)?shù)娜∩?,模式是很完善的,是前輩們用一生的?jīng)驗總結(jié)來的,我們不得不承認(rèn)它確定是很完美。

  我們先來介紹“簡單工廠模式”是怎么回事。簡單工廠是工廠的第一種抽象表示,也是比較簡單一種,比較復(fù)雜的就是抽象工廠,它是工廠最高的抽象應(yīng)用,我們最后詳細(xì)的講解。

  簡單工廠介紹:簡單工廠就是將對象的實例化提取出來形成專門負(fù)責(zé)創(chuàng)建對象的獨(dú)立的對象,我們稱之為簡單工廠。這種使用方式其實有點(diǎn)編程經(jīng)驗的朋友都會想到,可以不把它當(dāng)成是一種設(shè)計模式,但是書中有提到,所以為了不引起群噴我就麻煩點(diǎn)還是寫出來。

  工廠方法:將對象的創(chuàng)建延伸到子類中實現(xiàn)。

  其實從我個人觀點(diǎn)來看工廠方法的話,我也不認(rèn)為它是一種設(shè)計模式,在我們定義一個抽象類的時候,總會有一些抽象方法在里面,這些方法可能有的是創(chuàng)建對象的,有的是做一些其他的事情的。這樣的設(shè)計是很常理的,抽象方法就得由子類來進(jìn)行實現(xiàn)。我倒覺得抽象工廠是一種名副其實的設(shè)計模式。

  抽象工廠:抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠模式是指當(dāng)有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象

  這樣的定義可能對熟悉抽象工廠的朋友來說一目了然,初學(xué)者可能迷糊。我們還是用圖來形象的表示吧;

  1:

  這幅圖的大概意思是:水果販子有很多種,每種販子都想批發(fā)自己要賣的水果。我們重點(diǎn)放在工廠這邊,這里有好多工廠分別生產(chǎn)不同的水果。我們要對工廠進(jìn)行抽象,似乎已經(jīng)引導(dǎo)我們?nèi)ヌ崛〕橄蠊S的概念,工廠是具體的類,是專門負(fù)責(zé)生產(chǎn)某一種類型的水果,遵循設(shè)計模式所提倡的原則,我們要將變化的部分抽象出來。所以我們要對具體工廠進(jìn)行抽象形成抽象工廠,抽象工廠定義統(tǒng)一的獲取水果的接口,任何客戶販子都用這統(tǒng)一的接口進(jìn)行批發(fā)水果。

  2:

所有的客戶通過抽象工廠定義的接口獲取水果,我們下面用代碼來進(jìn)行講解。

  抽象工廠代碼:

 
 
 
 
  1.   using System;
  2.   using System.Collections.Generic;
  3.   using System.Text;
  4.   namespace ConsoleApplication1
  5.   {
  6.   /// 
  7.   /// 水果抽象工廠
  8.   /// 
  9.   public abstract class FruitAbstractFactory
  10.   {
  11.   /// 
  12.   /// 水果名稱,表示哪種水果如:蘋果、香蕉、橘子
  13.   /// 
  14.   public string FruitName { get; set; }
  15.   /// 
  16.   /// 抽象方法,獲取要批發(fā)水果的
  17.   /// 
  18.   /// 要批發(fā)的水果
  19.   public abstract string GetCurrentFruit();
  20.   }
  21.   }

  蘋果工廠代碼:

 
 
 
 
  1.   using System;
  2.   using System.Collections.Generic;
  3.   using System.Text;
  4.   namespace ConsoleApplication1
  5.   {
  6.   /// 
  7.   /// 蘋果工廠
  8.   /// 
  9.   public class AppleFactory : FruitAbstractFactory
  10.   {
  11.   public AppleFactory()
  12.   {
  13.   FruitName = "蘋果";
  14.   }
  15.  /// 
  16.   /// 重寫基類的獲取水果方法
  17.   /// 
  18.   /// 要批發(fā)的水果
  19.   public override string GetCurrentFruit()
  20.   {
  21.   return "給你:" + base.FruitName;
  22.  }
  23.   }
  24.   }

  香蕉工廠代碼:

 
 
 
 
  1.   using System;
  2.   using System.Collections.Generic;
  3.   using System.Text;
  4.   namespace ConsoleApplication1
  5.   {
  6.   /// 
  7.   /// 香蕉工廠
  8.   /// 
  9.   public class BananaFactory : FruitAbstractFactory
  10.   {
  11.   public BananaFactory()
  12.   {
  13.   FruitName = "香蕉";
  14.   }
  15.   public override string GetCurrentFruit()
  16.   {
  17.   return "給你:" + base.FruitName;
  18.  }
  19.   }
  20.   }

  橘子工廠代碼:

 
 
 
 
  1.   using System;
  2.   using System.Collections.Generic;
  3.   using System.Text;
  4.   namespace ConsoleApplication1
  5.   {
  6.   /// 
  7.   /// 橘子工廠
  8.   /// 
  9.   public class TangerineFactory : FruitAbstractFactory
  10.   {
  11.   public TangerineFactory()
  12.   {
  13.   FruitName = "橘子";
  14.  }
  15.   public override string GetCurrentFruit()
  16.   {
  17.   return "給你:" + base.FruitName;
  18.   }
  19.   }
  20.   }

  模擬調(diào)用代碼:

 
 
 
 
  1.   using System;
  2.   using System.Collections.Generic;
  3.   using System.Text;
  4.   namespace ConsoleApplication1
  5.   {
  6.   class Program
  7.   {
  8.   static void Main(string[] args)
  9. {
  10.   FruitAbstractFactory fruitfactory = new AppleFactory();//蘋果工廠
  11.   Console.WriteLine(fruitfactory.GetCurrentFruit());
  12.   Console.ReadLine();
  13.   fruitfactory = new BananaFactory();//香蕉工廠
  14.   Console.WriteLine(fruitfactory.GetCurrentFruit());
  15.   Console.ReadLine();
  16.   fruitfactory = new TangerineFactory();//橘子工廠
  17.   Console.WriteLine(fruitfactory.GetCurrentFruit());
  18.   Console.ReadLine();
  19.   }
  20.   }
  21.   }

  總結(jié):抽象工廠的大概原理就講完了。其實這里可以將水果販子也進(jìn)行抽象,形成工廠方法,然后在具體的販子里面進(jìn)行水果工廠的調(diào)用。由于時間關(guān)系我就不寫了。


分享標(biāo)題:.NET簡談設(shè)計模式之抽象工廠模式
鏈接URL:http://www.5511xx.com/article/cdhecjs.html