一模式定义
建造者简单理解就是造东西,只不过建造者模式建造的不是一个简单的东西,是一个比较复杂的东西。
二模式举例
1模式分析
我们借用顾客到手杌营业厅去办理手机套餐的例子说明这一模式
经过抽象分析后,我们得出下面信息
客户张三——终端需求
营业厅操作员——指导者(通知指导建造者生产什么样的手机套餐)
计算机——建造者(建造各种手机套餐)
手机套餐——产品
2建造者模式静态建模
3代码示例
3.1创建产品——手机套餐
Java代码
packagecom.demo.buider.model;
publicclassMobilePackage
{
//话费
privatefloatmoney;
//短信
privateintshortInfo;
//彩玲
privateStringmusic;
publicfloatgetMoney()
{
returnmoney;
}
publicvoidsetMoney(floatmoney)
{
this.money=money;
}
publicintgetShortInfo()
{
returnshortInfo;
}
publicvoidsetShortInfo(intshortInfo)
{
this.shortInfo=shortInfo;
}
publicStringgetMusic()
{
returnmusic;
}
publicvoidsetMusic(Stringmusic)
{
this.music=music;
}
}
3.2建造者接口
Java代码
packagecom.demo.buider.itf;
importcom.demo.buider.model.MobilePackage;
/**
*手机套餐Builder
*
*@author
*
*/
publicinterfaceIMobileBuilder
{
//建造手机套餐的话费
publicvoidbuildMoney();
//建造手机套餐的短信
publicvoidbuildShortInfo();
//建造手机套餐的彩玲
publicvoidbuildMusic();
//返回建造的手机套餐对象
publicMobilePackagegetMobilePackage();
}
3.3建立具体建造者
具体的建造者1
Java代码
packagecom.demo.buider.itf;
importcom.demo.buider.base.AbstractBasePackage;
importcom.demo.buider.model.MobilePackage;
/**
*套餐1
*
*@authormaofw
*
*/
publicclassMobileBuilderImpl1extendsAbstractBasePackageimplementsIMobileBuilder
{
//建造手机套餐的话费
publicvoidbuildMoney()
{
this.mobilePackage.setMoney(20.0f);
}
//建造手机套餐的彩玲
publicvoidbuildMusic()
{
this.mobilePackage.setMusic("天使");
}
//建造手机套餐的短信
publicvoidbuildShortInfo()
{
this.mobilePackage.setShortInfo(400);
}
//返回建造的手机套餐对象
publicMobilePackagegetMobilePackage()
{
returnthis.mobilePackage;
}
}
具体的建造者2
Java代码
packagecom.demo.buider.itf;
importcom.demo.buider.base.AbstractBasePackage;
importcom.demo.buider.model.MobilePackage;
/**
*套餐2
*
*@authormaofw
*
*/
publicclassMobileBuilderImpl2extendsAbstractBasePackageimplementsIMobileBuilder
{
//建造手机套餐的话费
publicvoidbuildMoney()
{
this.mobilePackage.setMoney(30.0f);
}
//建造手机套餐的彩玲
publicvoidbuildMusic()
{
this.mobilePackage.setMusic("大海");
}
//建造手机套餐的短信
publicvoidbuildShortInfo()
{
this.mobilePackage.setShortInfo(600);
}
//返回建造的手机套餐对象
publicMobilePackagegetMobilePackage()
{
returnthis.mobilePackage;
}
}
3.4创建指导者
Java代码
packagecom.demo.buider.director;
importcom.demo.buider.itf.IMobileBuilder;
importcom.demo.buider.model.MobilePackage;
/**
*手机套餐指导者
*
*@authormaofw
*
*/
publicclassMobileDirector
{
publicMobilePackagecreateMobilePackage(IMobileBuildermobileBuilder)
{
if(mobileBuilder!=null)
{
//构建话费
mobileBuilder.buildMoney();
//构建短信
mobileBuilder.buildShortInfo();
//构建彩玲
mobileBuilder.buildMusic();
//返回手机套餐
returnmobileBuilder.getMobilePackage();
}
returnnull;
}
}
让客户订购手机套餐
Java代码
packagecom.demo.buider;
importcom.demo.buider.director.MobileDirector;
importcom.demo.buider.itf.MobileBuilderImpl1;
importcom.demo.buider.itf.MobileBuilderImpl2;
importcom.demo.buider.model.MobilePackage;
publicclassMainApp
{
/**
*主应用程序
*
*@paramargs
*/
publicstaticvoidmain(String[]args)
{
//创建指导者
MobileDirectormobileDirector=newMobileDirector();
//套餐1
MobileBuilderImpl1mobileBuilderImpl1=newMobileBuilderImpl1();
//套餐2
MobileBuilderImpl2mobileBuilderImpl2=newMobileBuilderImpl2();
printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl1));
printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl2));
}
/**
*打印输出套餐信息
*/
publicstaticvoidprintMessage(MobilePackagemobilePackage)
{
System.out.println("--话费:"+mobilePackage.getMoney()+"\t短信:"+mobilePackage.getShortInfo()+"条\t彩玲:"+mobilePackage.getMusic());
}
}
运行结果
--话费:20.0短信:400条彩玲:天使
--话费:30.0短信:600条彩玲:大海
三该模式设汁原则
1分步骤创建复杂对象
2构造和表示分离
3单一职责原则
四使用场合
1当生成产品对象内部具有复杂结构时
2当复杂对象需要与表示分离,可能需要创建不同表示时
3当需要向客户隐藏产品内部结构表现时
如果觉得《建造者模式——办理手机套餐》对你有帮助,请点赞、收藏,并留下你的观点哦!