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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

asp.net

工厂设计模式–一种有效的方法

發(fā)布時(shí)間:2023/12/3 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工厂设计模式–一种有效的方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如您所知,工廠(chǎng)方法模式或俗稱(chēng)工廠(chǎng)設(shè)計(jì)模式是“創(chuàng)意設(shè)計(jì)模式”類(lèi)別下的一種設(shè)計(jì)模式。 模式背后的基本原理是,在運(yùn)行時(shí),我們根據(jù)傳遞的參數(shù)獲得類(lèi)似類(lèi)型的對(duì)象。 關(guān)于這種模式有很多文章,開(kāi)發(fā)人員可以通過(guò)各種方式來(lái)實(shí)現(xiàn)它。 在本文中,我將向您展示如何創(chuàng)建一種更好,最有效的工廠(chǎng)設(shè)計(jì)模式設(shè)計(jì)方法。

技術(shù)性

正如我已經(jīng)告訴您的那樣,在工廠(chǎng)設(shè)計(jì)的情況下,我們將在運(yùn)行時(shí)獲得一個(gè)類(lèi)似類(lèi)型的對(duì)象,這樣,對(duì)象的基礎(chǔ)實(shí)現(xiàn)將位于屏幕后面。 讓我們考慮一個(gè)簡(jiǎn)單的方法。 讓我們考慮一個(gè)可以是Male或Female的Person對(duì)象。 在運(yùn)行時(shí),我們僅應(yīng)考慮人的行為,而不應(yīng)考慮性別。 作為傳統(tǒng)方法,我們創(chuàng)建一個(gè)Person接口,并創(chuàng)建兩個(gè)實(shí)現(xiàn)類(lèi),例如MalePerson和FemalePerson。 根據(jù)運(yùn)行時(shí)性別數(shù)據(jù),我們傳遞到Factory類(lèi)的Factory方法,在其中確定性別類(lèi)型是Male還是Female,因此我們創(chuàng)建特定類(lèi)的實(shí)例并返回引用類(lèi)型對(duì)象。 這種方法聽(tīng)起來(lái)不錯(cuò),我們?cè)谠S多開(kāi)發(fā)活動(dòng)中都采用了這種方法。 在細(xì)粒度的多線(xiàn)程應(yīng)用程序中,我們可以確保它是有效的方法嗎? 表現(xiàn)如何呢? 還有其他方法嗎? 是的,我們?cè)敢狻?

讓我們考慮另一個(gè)實(shí)時(shí)示例。 考慮一個(gè)組織中的一種情況,該雇員可以擔(dān)任CEO,CTO,CFO,開(kāi)發(fā)人員,測(cè)試工程師,人力資源,人事,安全等。如果您想根據(jù)組織來(lái)了解員工的角色,您會(huì)怎么做? 您將如何創(chuàng)建更好的工廠(chǎng)設(shè)計(jì),以便我們可以輕松地找到角色并且不應(yīng)有性能損失? 您是否會(huì)通過(guò)提供多個(gè)if子句來(lái)采用相同的傳統(tǒng)方法? 您可以提出一個(gè)論點(diǎn),我們應(yīng)該使用切換條件。 很好……讓我們看看傳統(tǒng)方法,然后讓我們測(cè)量時(shí)間。

讓我們以傳統(tǒng)方式采用工廠(chǎng)設(shè)計(jì)。

package com.ddlab.rnd.patterns; /*** @author Debadatta Mishra(PIKU)**/ public interface Roles {public String getRole(); }

上面的接口用作一種類(lèi)型,因?yàn)榻M織中可以有各種類(lèi)型的角色。 它具有一個(gè)稱(chēng)為“ getRole()”的方法,用于指定員工角色的描述。

讓我們?yōu)榻M織中CEO,CTO和CFO的合適角色設(shè)計(jì)實(shí)現(xiàn)類(lèi)。

package com.ddlab.rnd.patterns; /*** @author Debadatta Mishra(PIKU)**/ public class CEORoles implements Roles {public String getRole() {return "CEO is the supreme head of the company";} }package com.ddlab.rnd.patterns; /*** @author Debadatta Mishra(PIKU)**/ public class CFORoles implements Roles {@Overridepublic String getRole() {return "CFO is the finance head of a company";} }package com.ddlab.rnd.patterns; /*** @author Debadatta Mishra(PIKU)**/ public class CTORoles implements Roles {@Overridepublic String getRole() {return "CTO is the technology decision maker of a company";} }

現(xiàn)在,我們必須考慮從中動(dòng)態(tài)創(chuàng)建對(duì)象的工廠(chǎng)。 讓我們看下面的代碼。

package com.ddlab.rnd.patterns; /*** @author Debadatta Mishra(PIKU)**/ public abstract class EmployeeFactory {public static Roles getRole( String type ){Roles roles = null;if( type.equals("cfo"))roles = new CFORoles();else if( type.equals("cto"))roles = new CTORoles();else if( type.equals("ceo"))roles = new CEORoles();return roles;} }

讓我們編寫(xiě)一個(gè)簡(jiǎn)單的測(cè)試工具類(lèi)來(lái)驗(yàn)證設(shè)計(jì)。

package com.ddlab.rnd.patterns; /*** @author Debadatta Mishra(PIKU)**/ public class TestTraditionalFactoryDesign {public static void main(String[] args) {String type = "ceo";long startTime = System.nanoTime();String role = EmployeeFactory.getRole(type).getRole();System.out.println("Role ::: "+role);long endTime = System.nanoTime();System.out.println("Time difference ::: "+(endTime-startTime)+" nano seconds");}}

如果運(yùn)行上述程序,則以下是我系統(tǒng)的輸出。

僅供參考,我的系統(tǒng)具有4 GB RAM和I5處理器。

Role ::: CEO is the supreme head of the company Time difference ::: 3477574 nano seconds

上面的設(shè)計(jì)似乎是正確的,但是性能呢? 您可能會(huì)說(shuō)沒(méi)關(guān)系,因?yàn)樗约{秒為單位。 當(dāng)然,您的應(yīng)用程序是否很小并不重要,但是對(duì)于大型企業(yè)應(yīng)用程序而言,這確實(shí)很重要。 如果您是優(yōu)秀的程序員或開(kāi)發(fā)人員,則不能忽略性能問(wèn)題,尤其是在產(chǎn)品開(kāi)發(fā)的情況下,它們可能是市場(chǎng)上的同類(lèi)產(chǎn)品。

為了解決上述問(wèn)題,讓我們嘗試另一種工廠(chǎng)設(shè)計(jì)方法,即工廠(chǎng)類(lèi)可能有所更改。

讓我們看下面的代碼。

package com.ddlab.rnd.patterns; /*** @author Debadatta Mishra(PIKU)**/ public enum EmployeeType {CEO("CEO") {@Overridepublic Roles getRoles() {return new CEORoles();}},CTO("CTO"){@Overridepublic Roles getRoles() {return new CTORoles();}},CFO("CFO"){@Overridepublic Roles getRoles() {return new CFORoles();}};private EmployeeType( String type ){this.type = type;}private String type;public abstract Roles getRoles();public String getType() {return type;}@Overridepublic String toString() {return "TYPE CODE -> "+type;} }

下面給出了測(cè)試線(xiàn)束等級(jí)。

package com.ddlab.rnd.patterns; import java.util.HashMap; import java.util.Map; /*** @author Debadatta Mishra(PIKU)**/ public class TestFactoryDesign {static Map<String,EmployeeType> typeMap = new HashMap<String,EmployeeType>();static{typeMap.put("cto", EmployeeType.CTO);typeMap.put("ceo", EmployeeType.CEO);typeMap.put("cfo", EmployeeType.CFO);}public static void main(String[] args){String empType = "ceo";try {long startTime = System.nanoTime();String whatIstheRole = typeMap.get(empType).getRoles().getRole();System.out.println("Role of the Employee :::"+whatIstheRole);long endTime = System.nanoTime();System.out.println("Time difference ::: "+(endTime-startTime)+" nano seconds");}catch (NullPointerException e) {System.out.println("No such Role is found");e.printStackTrace();}} }

如果運(yùn)行上面的代碼,您將獲得以下輸出。

Role ::: CEO is the supreme head of the company Time difference ::: 1049108 nano seconds

那時(shí)間呢 讓我們?cè)趥鹘y(tǒng)方法和現(xiàn)代方法之間花費(fèi)時(shí)間進(jìn)行比較。

傳統(tǒng)方法 3477574納秒
現(xiàn)代方法(使用枚舉和映射) 1049108納秒

您能考慮一下時(shí)差嗎,它僅比傳統(tǒng)方法快3倍。

那么哪個(gè)更好呢? 當(dāng)然,使用枚舉的現(xiàn)代方法更好。 除了枚舉,我還使用Map來(lái)維護(hù)雇員類(lèi)型及其對(duì)應(yīng)的枚舉的列表。 在這種情況下,就循環(huán)復(fù)雜性而言,無(wú)需使用if子句可能會(huì)影響我們的性能。 最好使用上述1049108納秒的方法。 您可以將ConcurrentMap用于多線(xiàn)程應(yīng)用程序。

結(jié)論

希望您喜歡我關(guān)于工廠(chǎng)設(shè)計(jì)模式的文章。 如果有任何澄清,您可以與我聯(lián)系debadatta.mishra@gmail.com 。

參考: 工廠(chǎng)設(shè)計(jì)模式–我們的JCG合作伙伴 Debadatta Mishra在Debadatta Mishra博客上的一種有效方法 。

翻譯自: https://www.javacodegeeks.com/2013/06/factory-design-pattern-an-effective-approach.html

總結(jié)

以上是生活随笔為你收集整理的工厂设计模式–一种有效的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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