這篇文章主要介紹“Java工廠模式是什么意思”,在日常操作中,相信很多人在Java工廠模式是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Java工廠模式是什么意思”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)是一家專業(yè)提供固陽企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都網(wǎng)站制作、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為固陽眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
工廠模式:
設(shè)計(jì)模式是源于生活,人類社會(huì)生產(chǎn)從原始的集體生產(chǎn)、私有化、作坊、手工工廠、流水線工程一路發(fā)展過來,工廠生產(chǎn)模式成為效率最高的方式。
那么在軟件設(shè)計(jì)中也參考了這種方式:
工廠模式是我們最常用的實(shí)例化對(duì)象模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程序系統(tǒng)可以說是隨處可見。因?yàn)楣S模式就相當(dāng)于創(chuàng)建實(shí)例對(duì)象的new,我們經(jīng)常要根據(jù)類Class生成實(shí)例對(duì)象,如A a=new A() 工廠模式也是用來創(chuàng)建實(shí)例對(duì)象的,所以以后new時(shí)就要多個(gè)心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會(huì)給你系統(tǒng)帶來更大的可擴(kuò)展性和盡量少的修改量。 工廠模式讓對(duì)象的使用者無需了解具體實(shí)現(xiàn),只需要通過對(duì)象工廠直接拿過來用就行了。
Java構(gòu)架師學(xué)習(xí)資料:Java構(gòu)架師技術(shù)棧/高并發(fā)/高可用/高性能/源碼解析
簡單工廠模式:
簡單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式,但不屬于23種設(shè)計(jì)模式之一。簡單工廠模式是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。簡單工廠模式是工廠模式家族中最簡單實(shí)用的模式,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)。
工廠(WaterFactory)角色:
簡單工廠模式的核心,它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯。工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對(duì)象。
抽象產(chǎn)品(Water)角色:
簡單工廠模式所創(chuàng)建的所有對(duì)象的父類,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。
具體產(chǎn)品(冰露、農(nóng)夫山泉、怡寶)角色:
是簡單工廠模式的創(chuàng)建目標(biāo),所有創(chuàng)建的對(duì)象都是充當(dāng)這個(gè)角色的某個(gè)具體類的實(shí)例。
優(yōu)點(diǎn):
工廠類是整個(gè)模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的對(duì)象.通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對(duì)象的尷尬局面擺脫出來,僅僅需要負(fù)責(zé)“消費(fèi)”對(duì)象就可以了。而不必管這些對(duì)象究竟如何創(chuàng)建及如何組織的.明確了各自的職責(zé)和權(quán)利,有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。
缺點(diǎn):
由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。
簡單工廠模式代碼示例:
package demo; /** * 飲用水抽象產(chǎn)品角色 * @author OuYang * */ public interface Water { /** * 獲取一個(gè)產(chǎn)品 * @return */ public String getWater(); } ------------------------------------ package demo; /** * 冰露實(shí)現(xiàn)類 * @author OuYang * */ public class IceDew implements Water{ public String getWater() { return "冰露純凈水"; } } -------------------------------------- package demo; /** * 怡寶實(shí)現(xiàn)類 * @author OuYang * */ public class SimpleFactory_Water { public Water getWater(String brand) { if(brand.equals("冰露")) { return new IceDew(); } if(brand.equals("農(nóng)夫山泉")) { return new NongFu(); } if(brand.equals("怡寶")) { return new YiBao(); } return null; } } -------------------------------------------- package simplefactory_demo; import demo.IceDew; import demo.SimpleFactory_Water; public class TestWater { public static void main(String[] args) { //普通new模式 System.out.println(new IceDew().getWater()); //簡單的工廠生產(chǎn)模式(小作坊) //用戶本身不再需要了解生產(chǎn)過程,只需要結(jié)果 SimpleFactory_Water factory = new SimpleFactory_Water(); System.out.println(factory.getWater("農(nóng)夫山泉").getWater()); } }
在Spring中,beanFactory就是對(duì)象工廠,配置
factory.getWater("農(nóng)夫山泉")
當(dāng)然,Spring的對(duì)象工廠遠(yuǎn)遠(yuǎn)沒有這么簡單。
工廠方法模式:
在簡單工廠模式中,由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。
很顯然,工廠也應(yīng)該抽象化,再去實(shí)現(xiàn)具體品牌的對(duì)象工廠,這樣就可以在工廠實(shí)現(xiàn)類豐富更多的參數(shù)和功能。分工更細(xì),可維修性也更高。
import SimpleFactory.Water; /** * 工廠模型 * @author OuYang * */ public interface Factory { //工廠的產(chǎn)品出口 Water getWater(); } -------------------------------------------- package methodfactory; import SimpleFactory.NongFu; import SimpleFactory.Water; /** * 農(nóng)夫山泉生產(chǎn)工廠 * @author OuYang * */ public class NongFuFactory implements Factory{ public Water getWater() { return new NongFu(); } } -------------------------------------------- package methodfactory; package abstractfactory; import SimpleFactory.IceDew; import SimpleFactory.NongFu; import SimpleFactory.YiBao; /** * 測(cè)試類 * @author OuYang * */ public class FactoryTest { public static void main(String[] args) { System.out.println(new YiBaoFactory().getWater().getWater()); } }
抽象工廠模式:
在工廠方法模式中,我們無需new各種各樣的對(duì)象來使用,只需要new一個(gè)對(duì)象工廠即可獲得我們想要的對(duì)象。
但是這樣只是解決了功能聚集在同一個(gè)工廠的問題,解決了改需求帶來的麻煩,但是我們?nèi)匀灰猲ew相應(yīng)的對(duì)象工廠,程序的復(fù)雜度依然存在。
創(chuàng)建抽象工廠,有公共屬性和抽象方法。
實(shí)現(xiàn)類中實(shí)現(xiàn)冰露、農(nóng)夫、怡寶的生產(chǎn)工廠。
這樣既解決的代碼的復(fù)雜性,又可以在工廠實(shí)現(xiàn)類中設(shè)置不同的參數(shù)。
/** * 抽象工廠 * @author OuYang * */ public abstract class AbstractFactory { //公共屬性和邏輯,容量 int volume; //獲取怡寶 public abstract YiBao getYiBao(); //獲得冰露 public abstract IceDew getIecDew(); //獲得農(nóng)夫山泉 public abstract NongFu getNongFu(); } ------------------------------- package abstractfactory; import SimpleFactory.IceDew; import SimpleFactory.NongFu; import SimpleFactory.YiBao; /** * 抽象工廠實(shí)現(xiàn)類 * @author OuYang * */ public class WaterFactory extends AbstractFactory{ @Override public YiBao getYiBao() { //設(shè)置為1升 this.volume=1; return new YiBao(); } @Override public IceDew getIecDew() { //設(shè)置為2升 return new IceDew(); } @Override public NongFu getNongFu() { //設(shè)置為3升 return new NongFu(); } } ------------------------------------ package simplefactory_demo; import abstractfactory.WaterFactory; /** *測(cè)試類 */ public class AbstractFactoryTest { public static void main(String[] args) { WaterFactory factory = new WaterFactory(); System.out.println(factory.getIecDew().getWater());
到此,關(guān)于“Java工廠模式是什么意思”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!