工廠方法模式(factory method):定義一個用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類。工廠方法使一個類的實(shí)例化延遲到其子類。
工廠方法模式結(jié)構(gòu)圖:
項(xiàng)目需求,創(chuàng)建一個雷鋒工廠,大學(xué)生可以去幫助別人,志愿者也可以幫助別人做事情。
1:創(chuàng)建一個雷鋒類,具有幫助別人掃地,洗衣,買米的功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package factorymethodmodel; public class leifeng { public void sweep(){ system.out.println( "掃地" ); } public void wash(){ system.out.println( "洗衣" ); } public void buyrice(){ system.out.println( "買米" ); } } |
2:創(chuàng)建一個學(xué)雷鋒的大學(xué)生的類,繼承雷鋒類,可增加自己的功能。
1
2
3
4
5
6
7
8
9
10
|
package factorymethodmodel; /** * 學(xué)雷鋒的大學(xué)生 * @author 我不是張英俊 * */ public class universitystudent extends leifeng { //里面可以增加專屬大學(xué)生的功能 } |
3:創(chuàng)建一個社區(qū)志愿者的類,繼承雷鋒類。
1
2
3
4
5
6
7
8
9
10
|
package factorymethodmodel; /** * 學(xué)雷鋒的社區(qū)人員 * @author 我不是張英俊 * */ public class volunteer extends leifeng { } |
4:創(chuàng)建一個雷鋒工廠接口。
1
2
3
4
5
6
7
8
9
|
package factorymethodmodel; /**雷鋒工廠的總接口。 * @author 我不是張英俊 * */ interface leifengfactory { leifeng creatlenfeng(); } |
5:創(chuàng)建學(xué)雷鋒的大學(xué)生的工廠。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package factorymethodmodel; /** * 學(xué)雷鋒的大學(xué)生工廠 * @author 我不是張英俊 * */ public class universitystudentfactory implements leifengfactory { @override public leifeng creatlenfeng() { return new universitystudent(); } } |
6:創(chuàng)建學(xué)雷鋒的志愿者工廠。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package factorymethodmodel; /** * 學(xué)雷鋒的社區(qū)制志愿者 * @author 我不是張英俊 * */ public class volunteerfactory implements leifengfactory { @override public leifeng creatlenfeng() { // todo auto-generated method stub return new volunteer(); } } |
7:測試類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package factorymethodmodel; /** * 建立一個雷鋒工廠,大學(xué)生可以以雷鋒的名義起幫助別人,社區(qū)志愿者也可以。 * 工廠化模式:定義一個用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類。 * 工廠方法使一個類的實(shí)例化延遲到其子類。 * @author 我不是張英俊 * */ public class test { public static void main(string[] args) { leifengfactory factory= new universitystudentfactory(); leifeng student =factory.creatlenfeng(); student.buyrice(); student.sweep(); student.wash(); } } |
8:控制臺
買米
掃地
洗衣
總結(jié):簡單工廠方法違背了開放-封閉原則,而工廠方法克服了此問題,當(dāng)需要增加新的,例如小學(xué)生學(xué)雷鋒的時候,工廠方法增加新的小學(xué)生工廠即可,然后再測試類中調(diào)用即可。
工廠方法模式還保持了封裝對象創(chuàng)建過程的有點(diǎn)。使得要更換對象的時候,不需要做打的改動就可以實(shí)現(xiàn),降低了客戶程序與產(chǎn)品對象的耦合,工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。由于使用了多態(tài)性,工廠模式保存了簡單工廠模式的有點(diǎn),并且克服了缺點(diǎn)。但缺點(diǎn)是,沒增加一個產(chǎn)品,就必須增加一個工廠類,增加的額外的開發(fā)量。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/hrlizhi/p/7651981.html