自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

.NET簡(jiǎn)談設(shè)計(jì)模式之抽象工廠模式

開(kāi)發(fā) 項(xiàng)目管理
本文講的是.NET設(shè)計(jì)模式中經(jīng)常被用到的“工廠模式”,就是將對(duì)象的創(chuàng)建交給一個(gè)叫做工廠的對(duì)象來(lái)統(tǒng)一進(jìn)行處理。

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

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

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

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

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

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

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

  工廠方法:將對(duì)象的創(chuàng)建延伸到子類(lèi)中實(shí)現(xiàn)。

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

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

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

  1:

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

  2:

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

  抽象工廠代碼:

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

  蘋(píng)果工廠代碼:

  1.   using System;  
  2.   using System.Collections.Generic;  
  3.   using System.Text;  
  4.   namespace ConsoleApplication1  
  5.   {  
  6.   /// <summary>  
  7.   /// 蘋(píng)果工廠  
  8.   /// </summary>  
  9.   public class AppleFactory : FruitAbstractFactory  
  10.   {  
  11.   public AppleFactory()  
  12.   {  
  13.   FruitName = "蘋(píng)果";  
  14.   }  
  15.  /// <summary>  
  16.   /// 重寫(xiě)基類(lèi)的獲取水果方法  
  17.   /// </summary>  
  18.   /// <returns>要批發(fā)的水果</returns>  
  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.   /// <summary>  
  7.   /// 香蕉工廠  
  8.   /// </summary>  
  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.   /// <summary>  
  7.   /// 橘子工廠  
  8.   /// </summary>  
  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();//蘋(píng)果工廠  
  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é):抽象工廠的大概原理就講完了。其實(shí)這里可以將水果販子也進(jìn)行抽象,形成工廠方法,然后在具體的販子里面進(jìn)行水果工廠的調(diào)用。由于時(shí)間關(guān)系我就不寫(xiě)了。

原文鏈接:http://www.cnblogs.com/wangiqngpei557/archive/2011/07/27/2118343.html

【編輯推薦】

  1. 新手軟件項(xiàng)目經(jīng)理該如何入門(mén)
  2. 項(xiàng)目經(jīng)理的力量應(yīng)該從哪里來(lái)?
  3. 當(dāng)你從程序員變?yōu)轫?xiàng)目經(jīng)理
  4. 軟件測(cè)試項(xiàng)目為什么會(huì)失敗
  5. 項(xiàng)目管理之CVS與SVN日常使用總結(jié)
責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2021-03-06 22:50:58

設(shè)計(jì)模式抽象

2020-10-19 09:28:00

抽象工廠模式

2021-09-29 13:53:17

抽象工廠模式

2009-01-15 10:55:29

JavaScript設(shè)計(jì)模式抽象工廠

2020-08-21 07:23:50

工廠模式設(shè)計(jì)

2011-11-17 16:03:05

Java工廠模式Clojure

2010-04-19 09:30:00

工廠模式PHP設(shè)計(jì)模式

2020-12-17 09:38:16

設(shè)計(jì)模式參數(shù)

2024-03-06 13:19:19

工廠模式Python函數(shù)

2024-09-14 08:24:44

設(shè)計(jì)模式抽象工廠模式JDK

2022-01-12 13:33:25

工廠模式設(shè)計(jì)

2019-08-16 10:46:46

JavaScript工廠模式抽象工廠模式

2022-05-09 08:04:50

工廠模式設(shè)計(jì)模式

2020-09-14 17:26:48

抽象工廠模式

2020-08-11 11:20:30

Typescript設(shè)計(jì)模式

2024-09-23 08:30:48

2023-08-07 06:30:15

抽象工廠模式軟件設(shè)計(jì)模式

2021-07-06 08:59:18

抽象工廠模式

2011-07-21 14:33:02

設(shè)計(jì)模式

2024-07-31 08:12:33

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)