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

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

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

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

java手机模式_Java使用建造者模式实现办理手机套餐功能详解相关推荐

  1. java设计模式建造_java设计模式-建造者模式

    建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示. 建造者模式将一个产品的内部表象和产品的生成过程分割开来,建造对象的时候只需要指定需要建造的类型,而不必了解具体的 ...

  2. java metadata 使用_java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMet ...

  3. java判断或_Java判断用户名和密码是否符合要求过程详解

    这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...

  4. java同步关键字_Java中synchronized关键字修饰方法同步的用法详解

    Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有 ...

  5. java读取日志_Java实时监控日志文件并输出的方法详解

    前言 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据 ...

  6. java steam说明_Java 8 Steam API map和flatMap方法使用详解

    一对多的提取内容用flatmap,一对一用map java 8 stream api 中有两个方法map和flatMap非常实用,应用场景也非常广泛,能极大提升编程效率.下面我们详细介绍一下这两个方法 ...

  7. java手势识别技术_Java乔晓松-android中的手势识别的详解

    对于android中的手势识别,效果如下图所示: 模拟器中有个可以添加手势的工具Gestures Builder,可以添加手势如下图所示: 当添加手势成功后,会在Sdcard上产生保存的手势的文件ge ...

  8. java 传xml js_JavaScript实现的XML与JSON互转功能详解

    本文实例讲述了JavaScript实现的XML与JSON互转功能.分享给大家供大家参考,具体如下: 这里来分享一个关于JavaScript实现XML与JSON互转例子,这里面介绍了国外的三款xml转j ...

  9. java设计模式(五)--建造者模式(Builder)

    转载:http://zz563143188.iteye.com/blog/1847029 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象 ...

最新文章

  1. Koltin 高阶函数
  2. android内容提供者_挖穿Android第三十九天
  3. [JLOI2014]聪明的燕姿(搜索)
  4. 广东网络借贷中介整改验收,留给平台的时间只有8天!
  5. ui设计未来十年前景_UI设计的10条诫命
  6. SpringBoot RequestBody ajax提交对象
  7. python判断字符串包含中文_查询字符串中是否包含中文字符(Python实现)
  8. Windows10新版本设置卓越性能
  9. xp如何删除计算机管理员用户账户,“WINXP系统除Administrator以外只有一个管理员账户时,此帐户默认无法删除,如何删除”的解决方案...
  10. Opencv学习笔记5:Opencv处理彩虹图、铜色图、灰度反转图
  11. iClap:产品经理再忙也要看《琅琊榜》
  12. 一个游戏创业者如何跳出模式
  13. 软件外包项目如何承接
  14. 伺服电机(servo motor)
  15. 认证 (authentication) 和授权 (authorization) 的区别.md
  16. js实现 动态密码的实现
  17. MySQL如何退出命令行
  18. 隆云通土壤ORP传感器
  19. 让Android的emulator支持web camera
  20. c语言可以设计那些游戏,语言游戏设计(c语言怎样设计游戏)

热门文章

  1. C语言结构体与C++中结构体和类的区别
  2. java图形界面文字输出_java图形化Swing教程(一)
  3. Java开发的本质 DOS界面的常用命令
  4. python运行脚本不弹出cmd框
  5. 深入掌握大数据Kafka的使用(基于Python开发)-张明阳-专题视频课程
  6. 点击按钮(button)打开新窗口(window)的几种情况
  7. 南邮MySQL实验报告一
  8. 视频交友直播软件源码开发的必备功能讲解
  9. 1.1.1 计算机网络的概念、组成、功能和分类
  10. python 爬取视频