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

 更新时间:2018年05月16日 09:09:44   作者:chengqiuming  
这篇文章主要介绍了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 BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 教你用java实现学生成绩管理系统(附详细代码)

    教你用java实现学生成绩管理系统(附详细代码)

    教学管理系统很适合初学者对于所学语言的练习,下面这篇文章主要给大家介绍了关于如何用java实现学生成绩管理系统的相关资料,文中给出了详细的实例代码,需要的朋友可以参考下
    2023-06-06
  • Java异常处理try catch的基本用法

    Java异常处理try catch的基本用法

    try就像一个网,把try{}里面的代码所抛出的异常都网住,然后把异常交给catch{}里面的代码去处理。最后执行finally之中的代码。无论try中代码有没有异常,也无论catch是否将异常捕获到,finally中的代码都一定会被执行。
    2021-12-12
  • java 用itext设置pdf纸张大小操作

    java 用itext设置pdf纸张大小操作

    这篇文章主要介绍了java 用itext设置pdf纸张大小操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 浅谈java对象的比较

    浅谈java对象的比较

    这篇文章主要给大家分享java对象的比较,主要有元素的比较、类的比较及比较的方法,想具体了解的小伙伴和小编一起进入下面文章内容吧
    2021-10-10
  • Spring自动装配@Autowired教程

    Spring自动装配@Autowired教程

    @Autowired注解是Spring中非常重要且常见的,接下来就简要的介绍一下它的用法。@Autowired默认是通过set方法,按照类型自动装配JavaBean,set方法可省略不写,它主要是修饰在成员变量上
    2023-01-01
  • Java线程的异常处理机制详情

    Java线程的异常处理机制详情

    这篇文章主要介绍了Java线程的异常处理机制详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 关于Hadoop的HDFS集群

    关于Hadoop的HDFS集群

    这篇文章主要介绍了关于Hadoop的HDFS集群,Hadoop 如何配置集群、不同的计算机里又应该有怎样的配置,这些问题是在学习中产生的。本章的配置中将会提供一个典型的示例,需要的朋友可以参考下
    2023-05-05
  • 关于maven环境的安装及maven集成idea环境的问题

    关于maven环境的安装及maven集成idea环境的问题

    Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。本文重点给大家介绍关于maven环境的安装及和idea环境的集成问题,感兴趣的朋友一起看看吧
    2021-09-09
  • JAVA多线程并发下的单例模式应用

    JAVA多线程并发下的单例模式应用

    单例模式应该是设计模式中比较简单的一个,也是非常常见的,但是在多线程并发的环境下使用却是不那么简单了,今天给大家分享一个我在开发过程中遇到的单例模式的应用。
    2017-03-03

最新评论