本文實例講述了java使用建造者模式實現(xiàn)辦理手機(jī)套餐功能。分享給大家供大家參考,具體如下:
一、模式定義
建造者簡單理解就是造東西,只不過建造者模式建造的不是一個簡單的東西,是一個比較復(fù)雜的東西。
二、模式舉例
1 模式分析
我們借用顧客到手杌營業(yè)廳去辦理手機(jī)套餐的例子說明這一模式
經(jīng)過抽象分析后,我們得出下面信息
客戶張三——終端需求
營業(yè)廳操作員——指導(dǎo)者(通知指導(dǎo)建造者生產(chǎn)什么樣的手機(jī)套餐)
計算機(jī)——建造者(建造各種手機(jī)套餐)
手機(jī)套餐——產(chǎn)品
2 建造者模式靜態(tài)建模
3 代碼示例
3.1 創(chuàng)建產(chǎn)品——手機(jī)套餐
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package com.demo.buider.model; public class mobilepackage { // 話費 private float money; // 短信 private int shortinfo; // 彩玲 private string music; public float getmoney() { return money; } public void setmoney( float money) { this .money = money; } public int getshortinfo() { return shortinfo; } public void setshortinfo( int shortinfo) { this .shortinfo = shortinfo; } public string getmusic() { return music; } public void setmusic(string music) { this .music = music; } } |
3.2 建造者接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package com.demo.buider.itf; import com.demo.buider.model.mobilepackage; /** * 手機(jī)套餐builder * * @author * */ public interface imobilebuilder { // 建造手機(jī)套餐的話費 public void buildmoney(); // 建造手機(jī)套餐的短信 public void buildshortinfo(); // 建造手機(jī)套餐的彩玲 public void buildmusic(); // 返回建造的手機(jī)套餐對象 public mobilepackage getmobilepackage(); } |
3.3 建立具體建造者
具體的建造者1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package com.demo.buider.itf; import com.demo.buider.base.abstractbasepackage; import com.demo.buider.model.mobilepackage; /** * 套餐1 * * @author maofw * */ public class mobilebuilderimpl1 extends abstractbasepackage implements imobilebuilder { // 建造手機(jī)套餐的話費 public void buildmoney() { this .mobilepackage.setmoney( 20 .0f); } // 建造手機(jī)套餐的彩玲 public void buildmusic() { this .mobilepackage.setmusic( "天使" ); } // 建造手機(jī)套餐的短信 public void buildshortinfo() { this .mobilepackage.setshortinfo( 400 ); } // 返回建造的手機(jī)套餐對象 public mobilepackage getmobilepackage() { return this .mobilepackage; } } |
具體的建造者2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package com.demo.buider.itf; import com.demo.buider.base.abstractbasepackage; import com.demo.buider.model.mobilepackage; /** * 套餐2 * * @author maofw * */ public class mobilebuilderimpl2 extends abstractbasepackage implements imobilebuilder { // 建造手機(jī)套餐的話費 public void buildmoney() { this .mobilepackage.setmoney( 30 .0f); } // 建造手機(jī)套餐的彩玲 public void buildmusic() { this .mobilepackage.setmusic( "大海" ); } // 建造手機(jī)套餐的短信 public void buildshortinfo() { this .mobilepackage.setshortinfo( 600 ); } // 返回建造的手機(jī)套餐對象 public mobilepackage getmobilepackage() { return this .mobilepackage; } } |
3.4 創(chuàng)建指導(dǎo)者
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package com.demo.buider.director; import com.demo.buider.itf.imobilebuilder; import com.demo.buider.model.mobilepackage; /** * 手機(jī)套餐指導(dǎo)者 * * @author maofw * */ public class mobiledirector { public mobilepackage createmobilepackage(imobilebuilder mobilebuilder) { if (mobilebuilder != null ) { // 構(gòu)建話費 mobilebuilder.buildmoney(); // 構(gòu)建短信 mobilebuilder.buildshortinfo(); // 構(gòu)建彩玲 mobilebuilder.buildmusic(); // 返回手機(jī)套餐 return mobilebuilder.getmobilepackage(); } return null ; } } |
讓客戶訂購手機(jī)套餐
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package com.demo.buider; import com.demo.buider.director.mobiledirector; import com.demo.buider.itf.mobilebuilderimpl1; import com.demo.buider.itf.mobilebuilderimpl2; import com.demo.buider.model.mobilepackage; public class mainapp { /** * 主應(yīng)用程序 * * @param args */ public static void main(string[] args) { // 創(chuàng)建指導(dǎo)者 mobiledirector mobiledirector = new mobiledirector(); // 套餐1 mobilebuilderimpl1 mobilebuilderimpl1 = new mobilebuilderimpl1(); // 套餐2 mobilebuilderimpl2 mobilebuilderimpl2 = new mobilebuilderimpl2(); printmessage(mobiledirector.createmobilepackage(mobilebuilderimpl1)); printmessage(mobiledirector.createmobilepackage(mobilebuilderimpl2)); } /** * 打印輸出套餐信息 */ public static void printmessage(mobilepackage mobilepackage) { system.out.println( "--話費:" + mobilepackage.getmoney() + "\t短信:" + mobilepackage.getshortinfo() + "條\t彩玲:" + mobilepackage.getmusic()); } } |
運行結(jié)果
--話費:20.0短信:400條彩玲:天使
--話費:30.0短信:600條彩玲:大海
三、該模式設(shè)汁原則
1 分步驟創(chuàng)建復(fù)雜對象
2 構(gòu)造和表示分離
3 單一職責(zé)原則
四、使用場合
1 當(dāng)生成產(chǎn)品對象內(nèi)部具有復(fù)雜結(jié)構(gòu)時
2 當(dāng)復(fù)雜對象需要與表示分離,可能需要創(chuàng)建不同表示時
3 當(dāng)需要向客戶隱藏產(chǎn)品內(nèi)部結(jié)構(gòu)表現(xiàn)時
希望本文所述對大家java程序設(shè)計有所幫助。
原文鏈接:https://blog.csdn.net/chengqiuming/article/details/70140546