欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用建造者模式實現辦理手機套餐功能詳解

 更新時間:2018年05月16日 09:09:44   作者:chengqiuming  
這篇文章主要介紹了Java使用建造者模式實現辦理手機套餐功能,較為詳細的描述了建造者模式的概念、原理并結合實例形式分析了Java使用建造者模式實現的辦理手機套餐功能具體步驟與相關操作注意事項,需要的朋友可以參考下

本文實例講述了Java使用建造者模式實現辦理手機套餐功能。分享給大家供大家參考,具體如下:

一、模式定義

建造者簡單理解就是造東西,只不過建造者模式建造的不是一個簡單的東西,是一個比較復雜的東西。

二、模式舉例

1 模式分析

我們借用顧客到手杌營業(yè)廳去辦理手機套餐的例子說明這一模式
經過抽象分析后,我們得出下面信息
客戶張三——終端需求
營業(yè)廳操作員——指導者(通知指導建造者生產什么樣的手機套餐)
計算機——建造者(建造各種手機套餐)
手機套餐——產品

2 建造者模式靜態(tài)建模

3 代碼示例

3.1 創(chuàng)建產品——手機套餐

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 創(chuàng)建指導者

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)
  {
    // 創(chuàng)建指導者
    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 分步驟創(chuàng)建復雜對象
2 構造和表示分離
3 單一職責原則

四、使用場合

1 當生成產品對象內部具有復雜結構時
2 當復雜對象需要與表示分離,可能需要創(chuàng)建不同表示時
3 當需要向客戶隱藏產品內部結構表現時

更多關于java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 教你用java實現學生成績管理系統(tǒng)(附詳細代碼)

    教你用java實現學生成績管理系統(tǒng)(附詳細代碼)

    教學管理系統(tǒng)很適合初學者對于所學語言的練習,下面這篇文章主要給大家介紹了關于如何用java實現學生成績管理系統(tǒng)的相關資料,文中給出了詳細的實例代碼,需要的朋友可以參考下
    2023-06-06
  • Java異常處理try?catch的基本用法

    Java異常處理try?catch的基本用法

    try就像一個網,把try{}里面的代碼所拋出的異常都網住,然后把異常交給catch{}里面的代碼去處理。最后執(zhí)行finally之中的代碼。無論try中代碼有沒有異常,也無論catch是否將異常捕獲到,finally中的代碼都一定會被執(zhí)行。
    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環(huán)境的安裝及maven集成idea環(huán)境的問題

    關于maven環(huán)境的安裝及maven集成idea環(huán)境的問題

    Maven 是一個基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。本文重點給大家介紹關于maven環(huán)境的安裝及和idea環(huán)境的集成問題,感興趣的朋友一起看看吧
    2021-09-09
  • JAVA多線程并發(fā)下的單例模式應用

    JAVA多線程并發(fā)下的單例模式應用

    單例模式應該是設計模式中比較簡單的一個,也是非常常見的,但是在多線程并發(fā)的環(huán)境下使用卻是不那么簡單了,今天給大家分享一個我在開發(fā)過程中遇到的單例模式的應用。
    2017-03-03

最新評論