国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

簡單工廠模式

2019-11-14 23:14:29
字體:
來源:轉載
供稿:網友
簡單工廠模式

原文鏈接:

http://tianweili.github.com/blog/2015/03/08/simple-factory-pattern/

介紹

簡單工廠模式屬于創建型模式,又叫做靜態工廠方法(static factory method)。但是它并沒有歸為23種GOF設計模式其中。

簡單工廠模式是由工廠對象來決定創建哪一種產品類的實例。

簡單說就是工廠對象根據傳入的參數,動態的決定創建哪一種產品類的實例,而這些產品類繼承自一個父類或一個接口。

UML類圖

簡單工廠模式的一個基本的UML類圖如下所示:

{% img /simple-factory-patternsimple-factory-uml.png %}

在這個UML類圖中包含以下角色:

工廠(Factory)

這是簡單工廠模式的核心,由它來負責實現創建所有實例的邏輯。工廠對象用來被外界調用,根據傳入的參數來決定創建哪一個產品對象。

抽象產品(Abstract PRoduct)

抽象類或接口。是所有具體產品對象的父類,由它來定義所有具體產品的公共接口。

具體產品(Concrete Product)

具體產品是簡單工廠模式的創建目標,所有創建的對象都是某個具體產品類的實例。

代碼示例
public interface Product {    public void function();}public class ProductA implements Product{    @Override    public void function() {        System.out.println("ProductA function ...");    }}public class ProductB implements Product{    @Override    public void function() {        System.out.println("ProductB function ...");    }}public class Factory {    public Product create(String productName) {        if (productName == null || "".equals(productName)) {            return null;        }        if ("productA".equals(productName)) {            return new ProductA();        } else if ("productB".equals(productName)) {            return new ProductB();        }        return null;    }}public class Main {    public static void main(String[] args) {        Factory factory = new Factory();        Product product1 = factory.create("productA");        Product product2 = factory.create("productB");        product1.function();        product2.function();    }}

輸出結果:

ProductA function ...ProductB function ...
優點

客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。

外界不用關注對象創建邏輯,產品對象具體的創建過程由工廠來實現。外界直接給定信息來決定創建哪個產品對象。

明確了各自的職責,有利于整個軟件體系結構的優化。

缺點

違反高內聚責任分配原則,將所有的創建邏輯都集中在了工廠類身上。

如果需要添加新的產品類,則需要修改工廠類。

當產品類不斷增多,工廠類對產品類型的判斷條件過多交織在了一起,會造成邏輯過于復雜,對系統的擴展和維護不利。

使用場景

工廠類創建的產品對象比較少。

外界只需要傳入工廠類參數來獲得產品對象,對于產品對象的創建過程不關心。

簡單工廠模式很容易違反高內聚責任分配原則,所以只是在一些很簡單的情況下使用。

應用實例附件的解壓

在工作中,有一個項目模塊中要求的功能是:登錄郵箱,獲取郵件,然后抓取郵件中的附件,下載下來,如果是壓縮包,則進行解壓,然后進行相應處理。在解壓時就用到了簡單工廠模式。附件壓縮包格式不一,有zip,rar等格式,則把每一種格式的解壓和處理都放到一個產品對象中,然后使用一個工廠類來決定創建哪一個產品進行相應的處理。

由于這個壓縮包解壓方式并不多,判斷邏輯并不太復雜,所以也沒必要用工廠方法模式,增加代碼復雜度。

作者:李天煒

原文鏈接:http://tianweili.github.com/blog/2015/03/08/simple-factory-pattern/

轉載請注明作者和文章出處,謝謝。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉林市| 库尔勒市| 海原县| 恭城| 泽库县| 德清县| 神农架林区| 通化市| 揭阳市| 自贡市| 剑河县| 玉门市| 嘉祥县| 武邑县| 辛集市| 麻栗坡县| 德庆县| 安达市| 博乐市| 海丰县| 永平县| 赤壁市| 乌鲁木齐县| 万宁市| 崇州市| 思茅市| 九寨沟县| 承德县| 土默特左旗| 泰安市| 绥棱县| 石柱| 当阳市| 拜城县| 黔西县| 乡宁县| 鲜城| 大安市| 鄂托克前旗| 吴江市| 漳浦县|