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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之 - 简单工厂模式

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


一、什么是簡單工廠模式


簡單工廠模式(Simple Factory Pattern):又稱為靜態(tài)工廠方法(Static Factory Method)模式,它屬于類創(chuàng)建型模式。在簡單工廠模式中,一個抽象的產(chǎn)品類,可以派生出多個具體的產(chǎn)品類,它們都具有共同的父類。

我們再來看下簡單工廠模式的UML圖:


二、簡單工廠模式的構(gòu)成

  • 工廠類:工廠類是我們的核心類,它負責創(chuàng)建所有實例的內(nèi)部邏輯,工廠類可以直接被調(diào)用創(chuàng)建我們的產(chǎn)品實例。

  • 抽象產(chǎn)品類:簡單工廠模式所創(chuàng)建的所有對象的父類,它負責描述所有實例所擁有的公共接口。

  • 具體產(chǎn)品類:簡單工廠所創(chuàng)建的具體的實例對象。


三、實例演示

我們做這個一個分析,有一家造車廠它里面可以造車的各個零件,在這個廠里,有專門造輪胎的車間,有專門造發(fā)動機的車間還有換門造車玻璃的車間,那么我們想一下,這些車間是不是都是歸屬于這個造車廠的,每個車間是不是都有自己的職能。

假設(shè)我們現(xiàn)在組裝車間要組裝一輛車,他們需要發(fā)動機、輪胎、玻璃等部件,那么作為組裝車的人,他們根本不關(guān)心你怎么做,他們只關(guān)心這個東西做沒做好,做好了趕緊遞過來,我這邊要用。

我們先來創(chuàng)建一個造車廠的類:

public interface CarFactory { void ability();}復(fù)制代碼

我們既然有了造車廠,那么我們地下的車間部門只需要實現(xiàn)這個類,去完成各自的職能就可以了

玻璃車間:

public class Glass implements CarFactory{ @Override public void ability() { System.out.println("玻璃已經(jīng)生產(chǎn)好了"); }}復(fù)制代碼

發(fā)動機車間:

public class Engine implements CarFactory { @Override public void ability() { System.out.println("發(fā)動機制造好了"); }}復(fù)制代碼


輪胎車間:

public class AutoTyre implements CarFactory{ @Override public void ability() { System.out.println("輪胎已經(jīng)生產(chǎn)好了"); }}復(fù)制代碼


既然已經(jīng)有個產(chǎn)品類和具體的產(chǎn)品,那么接下來我們是不是要做一個工廠去進行生產(chǎn)啊,工廠類是整個模式的關(guān)鍵,它需要進行必要的邏輯判斷,根據(jù)消費者給的信息,它需要決定來創(chuàng)建哪個對象的實例,消費者不再關(guān)心如何創(chuàng)建具體的產(chǎn)品,他只需要負責好需要生產(chǎn)的產(chǎn)品就行了。

public class Product { public static CarFactory product(String skill) { CarFactory carFactory = null; switch (skill) { // 制造輪胎 case "autoTyre": carFactory = new AutoTyre(); break; // 制造發(fā)動機 case "engine": carFactory = new Engine(); break; // 制造玻璃 case "glass": carFactory = new Glass(); } return carFactory; }}復(fù)制代碼

在這里我們可以發(fā)現(xiàn),所有類都有一個共同的父類,到這里大家應(yīng)該可以發(fā)現(xiàn),我們平時所說的封裝、繼承、多態(tài)在這里是不是已經(jīng)體現(xiàn)出來了(這里面我沒用繼承,是因為Java是單繼承的,所以我這里改為了接口實現(xiàn)的方式,因為Java是可以多實現(xiàn)的,這樣有利于我們程序的擴展)。


接下里,我們來看下組裝車間是怎么來索要所需的部件的

public class CarMain { public static void main(String[] args) { // 生產(chǎn)一個發(fā)動機 CarFactory engine = Product.product("engine"); engine.ability(); // 生產(chǎn)一個玻璃 CarFactory glass = Product.product("glass"); glass.ability(); // 生產(chǎn)一個輪胎 CarFactory autoTyre = Product.product("autoTyre"); autoTyre.ability(); }}復(fù)制代碼

我們先來看下結(jié)果:


如果我們想要再去生產(chǎn)其他的一些部件,我們只需要去實現(xiàn)造車廠的類,完成自己特定的職能就可以了,也不會去跟其他的車間有任何的交集,我們只需要完成我們的需要做的東西就好。


四、模式優(yōu)點

  • 首先程序?qū)崿F(xiàn)了解耦和,大大降低的程序之間的耦合性,我們增加車間不會影響到其他的車間進度;

  • 提高了程序的擴展性,如果我們想要增加一個車間,那么只需要實現(xiàn)造車廠類,完成自己的職能就好;

  • 組裝車間可以免除直接創(chuàng)建對象的責任,他不需要自己直接去創(chuàng)建,而是通過我們專門的工廠類來創(chuàng)建,他只需要告訴我們他需要什么東西;


五、簡單工廠模式的缺點

  • 首先大家應(yīng)該可以明顯的發(fā)現(xiàn),如果我們每增加一個產(chǎn)品,那相應(yīng)的我們就要增加一個子工廠,這樣額外的加大了我們的開發(fā)量;

  • 由于工廠類集中了所有實例的創(chuàng)建邏輯,違反了高類聚責任分配原則;


六、使用場景

  • 工廠類創(chuàng)建的對象比較少;

  • 消費者只需要傳進工廠類的參數(shù),對于如何創(chuàng)建對象不關(guān)心;

原文鏈接


轉(zhuǎn)載于:https://juejin.im/post/5bda4d7b5188257fa148e920

總結(jié)

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

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