java话费清单_Java使用建造者模式实现办理手机套餐功能详解

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

一、模式定义

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

二、模式举例

1 模式分析

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

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

客户张三——终端需求

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

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

手机套餐——产品

6bf5a61fa696d56a7899d9e95531c9ed.png

2 建造者模式静态建模

adb68a379bd8daac23813ac7e8d71512.png

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

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

e21b303094a9f99cae99321830cd3bfe.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值