首页 > 编程 > Java > 正文

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

2019-11-26 09:59:39
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表