Java使用建造者模式实现办理手机套餐功能详解

网友投稿 208 2023-02-04


Java使用建造者模式实现办理手机套餐功能详解

本文实例讲述了java使用建造者模式实现办理手机套餐功能。分享给大家供大家参考,具体如下:

一、模式定义

建造者简单理解就是造东西,只不过建造者模式建造的不是一个简单的东西,是一个比较复杂的东西。

二、模式举例

1 模式分析

我们借用顾客到手杌营业厅去办理手机套餐的例子说明这一模式

经过抽象分析后,我们得出下面信息

客户张三——终端需求

营业厅操作员——指导者(通知指导建造者生产什么样的手机套餐)

计算机——建造者(建造各种手机套餐)

手机套餐——产品

2 建造者模式静态建模

3 代码示例

3.1 创建产品——手机套餐

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 建造者接口

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

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

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 创建指导者

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;

}

}

让客户订购手机套餐

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 当复杂对象需要与表示分离,可能需要创建不同表http://示时

3 当需要向客户隐藏产品內部结构表现时

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:包含java线程的5种状态的词条
下一篇:跨路由器连接共享文件夹(跨路由器连接共享文件夹怎么设置)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~