本文实例讲述了java使用建造者模式实现办理手机套餐功能。分享给大家供大家参考,具体如下:
一、模式定义
建造者简单理解就是造东西,只不过建造者模式建造的不是一个简单的东西,是一个比较复杂的东西。
二、模式举例
1 模式分析
我们借用顾客到手杌营业厅去办理手机套餐的例子说明这一模式
经过抽象分析后,我们得出下面信息
客户张三——终端需求
营业厅操作员——指导者(通知指导建造者生产什么样的手机套餐)
计算机——建造者(建造各种手机套餐)
手机套餐——产品
2 建造者模式静态建模
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
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;
/**
* 手机套餐builder
*
* @author
*
*/
public interface imobilebuilder
{
// 建造手机套餐的话费
public void buildmoney();
// 建造手机套餐的短信
public void buildshortinfo();
// 建造手机套餐的彩玲
public void buildmusic();
// 返回建造的手机套餐对象
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
{
// 建造手机套餐的话费
public void buildmoney()
{
this .mobilepackage.setmoney( 20 .0f);
}
// 建造手机套餐的彩玲
public void buildmusic()
{
this .mobilepackage.setmusic( "天使" );
}
// 建造手机套餐的短信
public void buildshortinfo()
{
this .mobilepackage.setshortinfo( 400 );
}
// 返回建造的手机套餐对象
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
{
// 建造手机套餐的话费
public void buildmoney()
{
this .mobilepackage.setmoney( 30 .0f);
}
// 建造手机套餐的彩玲
public void buildmusic()
{
this .mobilepackage.setmusic( "大海" );
}
// 建造手机套餐的短信
public void buildshortinfo()
{
this .mobilepackage.setshortinfo( 600 );
}
// 返回建造的手机套餐对象
public mobilepackage getmobilepackage()
{
return this .mobilepackage;
}
}
|
3.4 创建指导者
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;
/**
* 手机套餐指导者
*
* @author maofw
*
*/
public class mobiledirector
{
public mobilepackage createmobilepackage(imobilebuilder mobilebuilder)
{
if (mobilebuilder != null )
{
// 构建话费
mobilebuilder.buildmoney();
// 构建短信
mobilebuilder.buildshortinfo();
// 构建彩玲
mobilebuilder.buildmusic();
// 返回手机套餐
return mobilebuilder.getmobilepackage();
}
return null ;
}
}
|
让客户订购手机套餐
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
{
/**
* 主应用程序
*
* @param args
*/
public static void main(string[] args)
{
// 创建指导者
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());
}
}
|
运行结果
--话费:20.0短信:400条彩玲:天使
--话费:30.0短信:600条彩玲:大海
三、该模式设汁原则
1 分步骤创建复杂对象
2 构造和表示分离
3 单一职责原则
四、使用场合
1 当生成产品对象内部具有复杂结构时
2 当复杂对象需要与表示分离,可能需要创建不同表示时
3 当需要向客户隐藏产品內部结构表现时
希望本文所述对大家java程序设计有所帮助。
原文链接:https://blog.csdn.net/chengqiuming/article/details/70140546