日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之二抽象工厂设计模式

發(fā)布時間:2024/7/5 asp.net 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之二抽象工厂设计模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

繼上篇簡單工廠設(shè)計模式之后,今天繼續(xù)講解抽象工廠設(shè)計模式。在簡單工廠中,我們的工廠類一次只可以處理一類產(chǎn)品。那么如果我們想處理多類產(chǎn)品,簡單工廠是滿足不了的。必須要用抽象工廠設(shè)計模式。

我們先從概念上來了解下什么是抽象工廠設(shè)計模式:

?1、提供一系列相互依賴對象的創(chuàng)建工作 ?2、封裝對象常規(guī)的創(chuàng)建方法(new) ?3、提供統(tǒng)一調(diào)用訪問方法的方式 ?4、避免調(diào)用訪問方法和具體對象創(chuàng)建工作的緊耦合 這些概念性的東西看起來比較抽象,直接上圖

如上圖所示,我們?nèi)绾稳ジ玫睦斫獬橄蠊S,首先 我們要分清在這個模式中的幾類角色。有抽象工廠,實體工廠,抽象產(chǎn)品,實體產(chǎn)品,客戶(調(diào)用代碼的類)。

?抽象工廠設(shè)計模式中各個對象的主要功能、職責(zé): ?1、用抽象工廠生產(chǎn)抽象產(chǎn)品 ?2、用實體工廠生產(chǎn)實體產(chǎn)品 ?3、用抽象產(chǎn)品提供實體產(chǎn)品訪問接口 ?4、用實體產(chǎn)品實現(xiàn)自己的功能 直接上代碼: 1、定義抽象產(chǎn)品 (父類可以是接口或者抽象類,我們定義一個抽象類,一個接口) 定義抽象產(chǎn)品A: /// <summary>/// 抽象產(chǎn)品A/// </summary>public abstract class Car{public abstract void Run();}

抽象產(chǎn)品B:

/// <summary>/// 抽象產(chǎn)品B/// </summary>public interface IBus{void Run();}


2、定義實體產(chǎn)品

實體產(chǎn)品A1:

/// <summary>/// 實體產(chǎn)品A1/// </summary>public class BMWCar:Car{public override void Run(){Console.WriteLine("寶馬轎車在行駛!");}}

實體產(chǎn)品A2:

/// <summary>/// 實體產(chǎn)品A2/// </summary>public class BenzCar:Car{public override void Run(){Console.WriteLine("奔馳轎車在行駛!");}}


實體產(chǎn)品B1:

/// <summary>/// 實體產(chǎn)品B1/// </summary>public class BMWBus : IBus{public void Run(){Console.WriteLine("寶馬大汽車");}}

?

實體產(chǎn)品B2:

/// <summary>/// 實體產(chǎn)品B2/// </summary>public class BenzBus : IBus{public void Run(){Console.WriteLine("奔馳大汽車");}}


我們甚至可以再建N個A3,A4,B3,B4.................... 此處省略。

?

3、定義抽象工廠

眾所周知現(xiàn)實生活中工廠都是生產(chǎn)產(chǎn)品的,在我們這 工廠是用來生產(chǎn)類的對象的。抽象工廠就是用來定義 工廠應(yīng)該做什么的。相當(dāng)于工廠接口規(guī)定工廠應(yīng)該做什么。同時創(chuàng)建實體工廠對象,創(chuàng)建對象可以用反射,本例中只是為了說明抽象工廠的思想和具體實現(xiàn)。我們直接使用配置文件來讀取。

/// <summary>/// 抽象工廠/// </summary>public abstract class AbstractFactory{public static AbstractFactory CreateFactory(string strType){AbstractFactory factory = null;switch (strType){case "BMW":factory = new BMWFactory();break;case "Benz":factory = new BenzFactory();break;}return factory;}/// <summary>/// 抽象方法 創(chuàng)建Car對象/// </summary>/// <returns></returns>public abstract Car CreateCar();/// <summary>/// 創(chuàng)建BUS/// </summary>/// <returns></returns>public abstract IBus CreateBus();}

?

?

4、定義實體工廠

?實體工廠1:

/// <summary>/// 實體工廠1/// </summary>public class BMWFactory:AbstractFactory{public override Car CreateCar(){return new BMWCar();}public override IBus CreateBus(){return new BMWBus();}}

實體工廠2:

/// <summary>/// 實體工廠2/// </summary>public class BenzFactory : AbstractFactory{public override Car CreateCar(){return new BenzCar();}public override IBus CreateBus(){return new BenzBus();}}

?

5、客戶端調(diào)用

從 最上面的圖我們可以看出客戶端調(diào)用抽象工廠的代碼只關(guān)注抽象工廠和抽象產(chǎn)品,而不關(guān)注具體的實現(xiàn)類。如下圖:

?由此我們得出抽象工廠的定義:

提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,無需指定它們具體的類 static void Main(string[] args){AbstractFactory factory = AbstractFactory.CreateFactory("Benz");Car car = factory.CreateCar();car.Run();IBus bus = factory.CreateBus();bus.Run();}

?

直接上代碼:

點我下載

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/suizhouqiwei/archive/2012/06/26/2563332.html

總結(jié)

以上是生活随笔為你收集整理的设计模式之二抽象工厂设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。