java手机模式_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 当复杂对象需要与表示分离,可能需要创建不同表示时
3 当需要向客户隐藏产品內部结构表现时
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
java手机模式_Java使用建造者模式实现办理手机套餐功能详解相关推荐
- java设计模式建造_java设计模式-建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示. 建造者模式将一个产品的内部表象和产品的生成过程分割开来,建造对象的时候只需要指定需要建造的类型,而不必了解具体的 ...
- java metadata 使用_java 查询oracle数据库所有表DatabaseMetaData的用法(详解)
一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMet ...
- java判断或_Java判断用户名和密码是否符合要求过程详解
这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...
- java同步关键字_Java中synchronized关键字修饰方法同步的用法详解
Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有 ...
- java读取日志_Java实时监控日志文件并输出的方法详解
前言 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据 ...
- java steam说明_Java 8 Steam API map和flatMap方法使用详解
一对多的提取内容用flatmap,一对一用map java 8 stream api 中有两个方法map和flatMap非常实用,应用场景也非常广泛,能极大提升编程效率.下面我们详细介绍一下这两个方法 ...
- java手势识别技术_Java乔晓松-android中的手势识别的详解
对于android中的手势识别,效果如下图所示: 模拟器中有个可以添加手势的工具Gestures Builder,可以添加手势如下图所示: 当添加手势成功后,会在Sdcard上产生保存的手势的文件ge ...
- java 传xml js_JavaScript实现的XML与JSON互转功能详解
本文实例讲述了JavaScript实现的XML与JSON互转功能.分享给大家供大家参考,具体如下: 这里来分享一个关于JavaScript实现XML与JSON互转例子,这里面介绍了国外的三款xml转j ...
- java设计模式(五)--建造者模式(Builder)
转载:http://zz563143188.iteye.com/blog/1847029 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象 ...
最新文章
- Koltin 高阶函数
- android内容提供者_挖穿Android第三十九天
- [JLOI2014]聪明的燕姿(搜索)
- 广东网络借贷中介整改验收,留给平台的时间只有8天!
- ui设计未来十年前景_UI设计的10条诫命
- SpringBoot RequestBody ajax提交对象
- python判断字符串包含中文_查询字符串中是否包含中文字符(Python实现)
- Windows10新版本设置卓越性能
- xp如何删除计算机管理员用户账户,“WINXP系统除Administrator以外只有一个管理员账户时,此帐户默认无法删除,如何删除”的解决方案...
- Opencv学习笔记5:Opencv处理彩虹图、铜色图、灰度反转图
- iClap:产品经理再忙也要看《琅琊榜》
- 一个游戏创业者如何跳出模式
- 软件外包项目如何承接
- 伺服电机(servo motor)
- 认证 (authentication) 和授权 (authorization) 的区别.md
- js实现 动态密码的实现
- MySQL如何退出命令行
- 隆云通土壤ORP传感器
- 让Android的emulator支持web camera
- c语言可以设计那些游戏,语言游戏设计(c语言怎样设计游戏)