設(shè)計模式---(簡單)工廠模式

工廠模式是設(shè)計模式中的“低門檻”,老少咸宜,屢試不爽。

工廠模式是在需要創(chuàng)建新對象實例時使用,一般是使用定義好的XxxFactory類調(diào)用createXxx()方法來創(chuàng)建實例,可以根據(jù)不同參數(shù)或方法名創(chuàng)建不同的實例,用來代替?zhèn)鹘y(tǒng)的new Xxx()。

各種開源框架的源代碼中大量使用此模式創(chuàng)建實例。

如,著名的開源工作流框架Activiti,當(dāng)需要創(chuàng)建流程模型校驗器時,就要使用工廠模式獲取

ProcessValidatorFactory processValidatorFactory = new ProcessValidatorFactory();

ProcessValidator defaultProcessValidator = processValidatorFactory.createDefaultProcessValidator();

這時候可能有小伙伴問了:傳統(tǒng)的創(chuàng)建對象的方法好像比工廠模式更簡單直接,明明一行代碼可以搞定的事情,為什么非要先創(chuàng)建個工廠對象,再獲取需要的對象?

要解決這個疑問,我們不妨從上面的例子源碼中一探究竟。查看createDefaultProcessValidator()方法的具體實現(xiàn)

public ProcessValidator createDefaultProcessValidator() {

? ? ?ProcessValidatorImpl processValidator = new ProcessValidatorImpl();

? ? ?processValidator.addValidatorSet(new ValidatorSetFactory().createActivitiExecutableProcessValidatorSet());

? ? ?return processValidator;

}

我們發(fā)現(xiàn),工廠類首先按照傳統(tǒng)方法new了一個對象,然后給這個對象設(shè)置了一個屬性值validatorSet;巧的是,指定屬性值時也使用了工廠模式獲取屬性對象,那不妨再看看createActivitiExecutableProcessValidatorSet()的具體實現(xiàn)

public ValidatorSet createActivitiExecutableProcessValidatorSet() {

? ValidatorSet validatorSet = new ValidatorSet(ValidatorSetNames.ACTIVITI_EXECUTABLE_PROCESS);

? validatorSet.addValidator(new AssociationValidator());

? validatorSet.addValidator(new SignalValidator());

? validatorSet.addValidator(new OperationValidator());

? validatorSet.addValidator(new ErrorValidator());

? validatorSet.addValidator(new DataObjectValidator());

? ///

? return validatorSet;

}

這一看就明白了吧,使用工廠模式和傳統(tǒng)方式的根本場景區(qū)別在于:如果在new一個對象后,還要進行一系列對象初始化工作(比如給屬性字段賦值等),那就需要重構(gòu)為工廠模式,讓需要創(chuàng)建該對象實例的開發(fā)人員不需要知道創(chuàng)建細節(jié)就可以拿到可正常使用的對象;如果僅僅只需要new一下,比如new StringBuilder(),那就可以不使用工廠模式了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容