簡單工廠模式 概述及應用

2021-09-12 16:19:26 字數 3830 閱讀 6323

最近在學習設計模式,被大家經常提及的應該就是工廠模式了,查閱了相關資料,發現之前理解的工廠模式其實是只是簡單工廠模式,在正式介紹設計模式中的工廠模式之前,這篇部落格先對簡單工廠模式做了介紹。

簡單工廠模式的實質是指更加傳入工廠類的引數,動態建立某一具體的產品類。它主要包含三個角色:

(1)工廠角色

(2)抽象產品角色

(3)具體產品角色

其優點是:可以根據外界傳入引數明確建立哪個物件,而不必知道物件是如何建立和組織的,使其和外界的直接接觸分離開來,各司其職,增加新的產品時也不需要修改呼叫端的**,有利於整個軟體體系的優化。在一些產品比較明確、產品個數不算多的情況下,使用簡單工廠還是挺有優勢的。

缺點是:全部的建立邏輯集中在了乙個工廠裡面,當增加新的產品時,需要修改工廠裡的**,這違反了設計模式中的「開閉原則」,而且當產品類別比較多的時候,工廠類的**會變得臃腫,不美觀,容易出錯,不利於擴充套件和維護。

簡單工廠其實不是一種設計模式,可以理解成我們的程式設計習慣,開發中使用還是比較廣泛的。

開發中經常遇到一些操作的處理,如何讓這些操作集中管理又使呼叫方避免直接建立具體的操作類呢,這裡我們就能用到簡單工廠模式了,下面來看具體的例項。

首先我們看下操作類管理的類圖:

下面來看看其具體的實現,首先定義抽象產品 baseoperation 和具體產品(cancelop、deleteop、...):

package com.dz.pattern.******factorypattern.operation;

import com.dz.pattern.******factorypattern.entity.statecontent;

/** * created by dz on 2019/3/17.

*/public abstract class baseoperation

public void setstatecontent(statecontent statecontent)

public abstract void onexecute();

}

package com.dz.pattern.******factorypattern.operation;

/** * created by dz on 2019/3/17.

*/public class cancelop extends baseoperation

}

package com.dz.pattern.******factorypattern.operation;

/** * created by dz on 2019/3/17.

*/public class deleteop extends baseoperation

}

具體的工廠類實現如下:

package com.dz.pattern.******factorypattern;

import com.dz.pattern.******factorypattern.entity.statecontent;

import com.dz.pattern.******factorypattern.operation.baseoperation;

import com.dz.pattern.******factorypattern.operation.cancelop;

import com.dz.pattern.******factorypattern.operation.deleteop;

/** * created by dz on 2019/3/17.

*/public class ******operationfactory

return operation;}}

定義乙個操作類的統一入口:

package com.dz.pattern.******factorypattern;

import com.dz.pattern.******factorypattern.entity.statecontent;

import com.dz.pattern.******factorypattern.enumeration.operationenum;

import com.dz.pattern.******factorypattern.operation.baseoperation;

/** * created by dz on 2019/3/17.

*/public class operationset

}

在實現的過程中還使用到了兩個輔助類:

statecontent:上下文引數類,便於後面具體的操作實現
operationenum:操作列舉類,用於列舉具體的操作,可以有效的防止傳參時輸入錯誤
package com.dz.pattern.******factorypattern.entity;

import com.dz.pattern.******factorypattern.enumeration.operationenum;

/** * created by dz on 2019/3/17.

*/public class statecontent

public void setkeyid(long keyid)

public operationenum getoperation()

public void setoperation(operationenum operation)

}

package com.dz.pattern.******factorypattern.enumeration;

/** * created by dz on 2019/3/17.

*/public enum operationenum

最後測試這個簡單工廠:

package com.dz.pattern.******factorypattern;

import com.dz.pattern.******factorypattern.entity.statecontent;

import com.dz.pattern.******factorypattern.enumeration.operationenum;

/** * created by dz on 2019/3/17.

*/public class operationdemo

}

輸出如下:

cancelop execute, keyid = 100

deleteop execute, keyid = 100

簡單工廠模式一般又被稱為靜態工廠模式,主要是因為在建立具體物件的時候使用的是靜態方法,所以被稱為靜態工廠模式。上文中沒有使用,要是想使用的話可修改 operationfactory 類的方法 createoperation,如下:

public class operationfactory 

return operation;}}

同時修改呼叫的地方:

public class operationdemo 

}

簡單工廠模式 應用

簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。將 類例項化的操作 與 使用物件的操作 分開,讓使用者不用知道具體引數就可以...

UML概述及開發階段的應用

其中最重要的一部分要屬的上uml中的各種圖了。其實在前些日子師哥講到有關機房收費系統的文件的時候,就已經涉及到裡面的一部分相關知識了。這裡,又一次系統的了解一下,在軟體開發階段的文件編寫中,各階段所需要的圖都有哪些。主要用到的九種圖 總結如下 1.需求階段 1 用例圖 來描述使用者的需求 角色,功能...

jQuery事件繫結 on 簡要概述及應用

前幾天在看 jquery基礎教程 看到事件委託的時候,關於live 方法講的不是很詳細,就去搜了一下關於live 和delegate 的。然後在一處看到live 已經被移除了,囧,然後去看了最新的jq原始碼,果然被移除了,現在是1.9.1版本,不知道live 是在之前哪個版本被移除的,慚愧啊,之前都...