簡(jiǎn)單工廠模式里通過(guò)參數(shù)不同創(chuàng)建不同的實(shí)例,創(chuàng)建實(shí)例的邏輯只存在于單一的工廠類(lèi)靜態(tài)方法里志笼。工廠方法模式則將這些創(chuàng)建的實(shí)例的邏輯分放在“方法”中,工廠類(lèi)也抽象出一個(gè)Factory接口,各個(gè)不同Product對(duì)應(yīng)的ConcreteFactory類(lèi)(實(shí)現(xiàn)了Factory接口)分別負(fù)責(zé)創(chuàng)建對(duì)應(yīng)Product的實(shí)例辽俗。
工廠方法模式是簡(jiǎn)單工廠方法模式的進(jìn)一步抽象坐榆,利用面向?qū)ο蟮亩鄳B(tài)將簡(jiǎn)單工廠模式里單一工廠負(fù)責(zé)生產(chǎn)所有產(chǎn)品轉(zhuǎn)移到抽象工廠類(lèi)/接口的子類(lèi)里實(shí)現(xiàn)拴魄。如果需要新添加產(chǎn)品,只需添加產(chǎn)品對(duì)應(yīng)的具體工廠類(lèi)即可席镀,而不需要修改已有的代碼匹中。
下面是工廠方法模式一個(gè)示例的類(lèi)圖:
可以看到針對(duì)不同的xxLog(產(chǎn)品),分別提供了一個(gè)xxLogFactory(具體工廠)豪诲。
現(xiàn)實(shí)示例(JDBC中的工廠方法):
Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://loc
alhost:1433; DatabaseName=DB;user=sa;password=");
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery("select * from UserInfo");