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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

抽象工厂和工厂方法示例_抽象工厂设计模式示例

發布時間:2023/12/3 asp.net 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抽象工厂和工厂方法示例_抽象工厂设计模式示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

抽象工廠和工廠方法示例

本文是我們名為“ Java設計模式 ”的學院課程的一部分。

在本課程中,您將深入研究大量的設計模式,并了解如何在Java中實現和利用它們。 您將了解模式如此重要的原因,并了解何時以及如何應用模式中的每一個。 在這里查看 !

目錄

1.簡介 2.什么是抽象工廠設計模式 3.實施抽象工廠設計模式 4.何時使用抽象工廠設計模式 5. JDK中的抽象工廠模式 6.下載源代碼

1.簡介

在上一課中 ,我們為一家產品公司開發了一個應用程序,用于解析XML并將結果顯示給他們。 為此,我們為公司與其客戶之間的不同通信類型創建了不同的解析器。 我們使用工廠方法設計模式來解決他們的問題。

該應用程序適合他們。 但是現在客戶不想遵循公司的特定XML規則。 客戶希望使用自己的XML規則與產品公司進行通信。 這意味著對于每個客戶,公司都應具有客戶特定的XML解析器。 例如,對于NY客戶端,應該有四種特定類型的XML解析器,即NYErrorXMLParser,NYFeedbackXML,NYOrderXMLParser,NYResponseXMLParser和TW客戶端的四種不同的解析器。

公司已要求您根據新要求更改應用程序。 為了開發解析器應用程序,我們使用了“工廠方法設計模式”,其中要使用的確切對象由子類根據解析器的類型確定。 現在,為了實現這一新要求,我們將使用工廠工廠,即抽象工廠。

這次我們需要根據客戶端特定的XML進行解析器,因此我們將為不同的客戶端創建不同的工廠,這將為我們提供要解析的客戶端特定的XML。 為此,我們將創建一個抽象工廠,然后實施該工廠以提供特定于客戶的XML工廠。 然后,我們將使用該工廠來獲取所需的客戶端特定的XML解析器對象。

抽象工廠是我們選擇的設計模式,在實現它來解決我們的問題之前,請讓我們進一步了解它。

2.什么是抽象工廠設計模式

抽象工廠(AKA Kit)是一種設計模式,它提供了一個接口,用于創建相關或相關對象的族,而無需指定其具體類。 抽象工廠模式將工廠方法模式的概念提高到了一個新的水平。 抽象工廠是一個類,提供了產生對象系列的接口。 在Java中,可以使用接口或抽象類來實現。

當客戶對象想要創建一組相關的相關類的實例而不必知道要實例化哪個具體的具體類時,則使用Abstract Factory模式非常有用。 不同的具體工廠實現抽象工廠接口。 客戶對象利用這些具體工廠來創建對象,因此不需要知道實際實例化了哪個具體類。

抽象工廠可用于插入不同的對象組以更改系統的行為。 對于每個小組或家庭,都將建立一個具體工廠來管理對象的創建以及它們之間的相互依賴性和一致性要求。 每個具體工廠都實現抽象工廠的接口

圖1

抽象工廠

  • 聲明用于創建抽象產品對象的操作的接口。

混凝土工廠

  • 實施操作以創建具體的產品對象。

抽象產品

  • 聲明一種產品對象的接口。

混凝土產品

  • 定義要由相應的混凝土工廠創建的產品對象。
  • 實現AbstractProduct接口。

客戶

  • 僅使用由AbstractFactory和AbstractProduct類聲明的接口。

3.實施抽象工廠設計模式

為了實現抽象工廠設計模式,我們將首先創建一個將由所有具體工廠實現的接口。

package com.javacodegeeks.patterns.abstractfactorypattern;public interface AbstractParserFactory {public XMLParser getParserInstance(String parserType); }

上面的接口由客戶端特定的具體工廠實現,它將向客戶端對象提供XML解析器對象。 getParserInstance方法使用parserType作為參數,該參數用于獲取特定于消息的(錯誤解析器,訂單解析器等)解析器對象。

兩個特定于客戶端的具體解析器工廠是:

package com.javacodegeeks.patterns.abstractfactorypattern;public class NYParserFactory implements AbstractParserFactory {@Overridepublic XMLParser getParserInstance(String parserType) {switch(parserType){case "NYERROR": return new NYErrorXMLParser();case "NYFEEDBACK": return new NYFeedbackXMLParser ();case "NYORDER": return new NYOrderXMLParser();case "NYRESPONSE": return new NYResponseXMLParser();}return null;}}package com.javacodegeeks.patterns.abstractfactorypattern;public class TWParserFactory implements AbstractParserFactory {@Overridepublic XMLParser getParserInstance(String parserType) {switch(parserType){case "TWERROR": return new TWErrorXMLParser();case "TWFEEDBACK": return new TWFeedbackXMLParser ();case "TWORDER": return new TWOrderXMLParser();case "TWRESPONSE": return new TWResponseXMLParser();}return null;}}

上面的兩個工廠實現了AbstractParserFactory接口,并覆蓋了getParserInstance方法。 它根據參數中請求的解析器??類型返回特定于客戶端的解析器對象。

package com.javacodegeeks.patterns.abstractfactorypattern;public interface XMLParser {public String parse();}

上面的接口由具體的解析器類實現,以解析XML并返回字符串消息。

公司與其客戶之間有兩個客戶以及四種不同類型的消息交換。 因此,應該有六種不同類型的特定于客戶端的具體XML解析器。

package com.javacodegeeks.patterns.abstractfactorypattern;public class NYErrorXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("NY Parsing error XML...");return "NY Error XML Message";}}package com.javacodegeeks.patterns.abstractfactorypattern;public class NYFeedbackXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("NY Parsing feedback XML...");return "NY Feedback XML Message";}}package com.javacodegeeks.patterns.abstractfactorypattern;public class NYOrderXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("NY Parsing order XML...");return "NY Order XML Message";}}package com.javacodegeeks.patterns.abstractfactorypattern;public class NYResponseXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("NY Parsing response XML...");return "NY Response XML Message";}}package com.javacodegeeks.patterns.abstractfactorypattern;public class TWErrorXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("TW Parsing error XML...");return "TW Error XML Message";}}package com.javacodegeeks.patterns.abstractfactorypattern;public class TWFeedbackXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("TW Parsing feedback XML...");return "TW Feedback XML Message";}}package com.javacodegeeks.patterns.abstractfactorypattern;public class TWOrderXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("TW Parsing order XML...");return "TW Order XML Message";}}package com.javacodegeeks.patterns.abstractfactorypattern;public class TWResponseXMLParser implements XMLParser{@Overridepublic String parse() {System.out.println("TW Parsing response XML...");return "TW Response XML Message";}}

為了避免客戶代碼和工廠之間的依賴性,可選地,我們實現了一個工廠生產者,該生產者具有靜態方法,并負責向客戶對象提供所需的工廠對象。

package com.javacodegeeks.patterns.abstractfactorypattern;public final class ParserFactoryProducer {private ParserFactoryProducer(){throw new AssertionError();}public static AbstractParserFactory getFactory(String factoryType){switch(factoryType){case "NYFactory": return new NYParserFactory();case "TWFactory": return new TWParserFactory();}return null;}}

現在,讓我們測試代碼。

package com.javacodegeeks.patterns.abstractfactorypattern;public class TestAbstractFactoryPattern {public static void main(String[] args) {AbstractParserFactory parserFactory = ParserFactoryProducer.getFactory("NYFactory");XMLParser parser = parserFactory.getParserInstance("NYORDER");String msg="";msg = parser.parse();System.out.println(msg);System.out.println("************************************");parserFactory = ParserFactoryProducer.getFactory("TWFactory");parser = parserFactory.getParserInstance("TWFEEDBACK");msg = parser.parse();System.out.println(msg);}}

上面的代碼將導致以下輸出:

NY Parsing order XML... NY Order XML Message ************************************ TW Parsing feedback XML... TW Feedback XML Message

在上面的課程中,我們首先從工廠生產商那里獲得了NY工廠,然后從NY分析器工廠獲得了Order XML分析器。 然后,我們在解析器對象上調用了parse方法,并顯示了返回消息。 正如輸出中清楚顯示的那樣,我們為TW客戶做了同樣的事情。

4.何時使用抽象工廠設計模式

在以下情況下使用抽象工廠模式

  • 一個系統應該獨立于其產品的創建,組成和表示方式。
  • 系統應配置有多個產品系列之一。
  • 相關產品對象系列旨在一起使用,并且您需要強制執行此約束。
  • 您想提供產品的類庫,并且只想顯示它們的接口,而不是它們的實現。

5. JDK中的抽象工廠模式

  • java.util.Calendar#getInstance()
  • java.util.Arrays#asList()
  • java.util.ResourceBundle#getBundle()
  • java.sql.DriverManager#getConnection()
  • java.sql.Connection#createStatement()
  • java.sql.Statement#executeQuery()
  • java.text.NumberFormat#getInstance()
  • javax.xml.transform.TransformerFactory#newInstance()

6.下載源代碼

這是關于抽象工廠設計模式的課程。 您可以在此處下載源代碼: AbstractFactoryPattern-Project

翻譯自: https://www.javacodegeeks.com/2015/09/abstract-factory-design-pattern.html

抽象工廠和工廠方法示例

總結

以上是生活随笔為你收集整理的抽象工厂和工厂方法示例_抽象工厂设计模式示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。