最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一、模式定義

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

二、模式舉例

1 模式分析

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

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

3 代碼示例

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

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)建指導(dǎo)者

package com.demo.buider.director;
import com.demo.buider.itf.IMobileBuilder;
import com.demo.buider.model.MobilePackage;
/**
 * 手機套餐指導(dǎo)者
 *
 * @author maofw
 *
 */
public class MobileDirector
{
  public MobilePackage createMobilePackage(IMobileBuilder mobileBuilder)
  {
    if (mobileBuilder != null)
    {
      // 構(gòu)建話費
      mobileBuilder.buildMoney();
      // 構(gòu)建短信
      mobileBuilder.buildShortInfo();
      // 構(gòu)建彩玲
      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
{
  /**
   * 主應(yīng)用程序
   *
   * @param args
   */
  public static void main(String[] args)
  {
    // 創(chuàng)建指導(dǎo)者
    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());
  }
}

運行結(jié)果

--話費:20.0短信:400條彩玲:天使
--話費:30.0短信:600條彩玲:大海

三、該模式設(shè)汁原則

1 分步驟創(chuàng)建復(fù)雜對象
2 構(gòu)造和表示分離
3 單一職責原則

四、使用場合

1 當生成產(chǎn)品對象內(nèi)部具有復(fù)雜結(jié)構(gòu)時
2 當復(fù)雜對象需要與表示分離,可能需要創(chuàng)建不同表示時
3 當需要向客戶隱藏產(chǎn)品內(nèi)部結(jié)構(gòu)表現(xiàn)時

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

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

相關(guān)文章

  • Spring配置與依賴注入基礎(chǔ)詳解

    Spring配置與依賴注入基礎(chǔ)詳解

    依賴注入(Dependency?Injection)和控制反轉(zhuǎn)(Inversion?of?Control)是同一個概念。具體含義是:當某個角色(可能是一個Java實例,調(diào)用者)需要另一個角色(另一個Java實例,被調(diào)用者)的協(xié)助時,在?傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例
    2022-08-08
  • Java:不支持發(fā)行版本5的超詳細簡單解決方案

    Java:不支持發(fā)行版本5的超詳細簡單解決方案

    發(fā)行版本5是Java5,已經(jīng)是十多年前的版本了,現(xiàn)在已經(jīng)不再被支持,如果您使用的是舊版的Java開發(fā)工具,可能會出現(xiàn)這樣的錯誤,這篇文章主要給大家介紹了關(guān)于Java:不支持發(fā)行版本5的超詳細簡單解決方案,需要的朋友可以參考下
    2024-01-01
  • mybatis關(guān)聯(lián)關(guān)系映射的實現(xiàn)

    mybatis關(guān)聯(lián)關(guān)系映射的實現(xiàn)

    MyBatis的關(guān)聯(lián)關(guān)系映射在復(fù)雜數(shù)據(jù)模型中至關(guān)重要,使開發(fā)人員能夠以最靈活的方式滿足不同項目的需求,本文就來介紹一下mybatis關(guān)聯(lián)關(guān)系映射的實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • 淺談MyBatis通用Mapper實現(xiàn)原理

    淺談MyBatis通用Mapper實現(xiàn)原理

    這篇文章主要介紹了淺談MyBatis通用Mapper實現(xiàn)原理,本文會先介紹通用 Mapper 的簡單原理,然后使用最簡單的代碼來實現(xiàn)這個過程。感興趣的小伙伴們可以參考一下
    2018-10-10
  • Linux系統(tǒng)下更換jdk版本詳細步驟

    Linux系統(tǒng)下更換jdk版本詳細步驟

    隨著Java語言的不斷更新,多個版本的JDK在現(xiàn)在的Linux環(huán)境中都存在,使得不同的開發(fā)人員可以按照自己的需求使用不同的JDK版本,這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下更換jdk版本的詳細步驟,需要的朋友可以參考下
    2023-12-12
  • springboot整合redis修改分區(qū)的操作流程

    springboot整合redis修改分區(qū)的操作流程

    這篇文章主要介紹了springboot整合redis修改分區(qū)的操作流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring-Retry(重試機制)解讀

    Spring-Retry(重試機制)解讀

    這篇文章主要介紹了Spring-Retry(重試機制),具有很好的價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java反射獲取一個object屬性值代碼解析

    java反射獲取一個object屬性值代碼解析

    這篇文章主要介紹了java反射獲取一個object屬性值代碼解析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • springmvc無法訪問/WEB-INF/views下的jsp的解決方法

    springmvc無法訪問/WEB-INF/views下的jsp的解決方法

    本篇文章主要介紹了springmvc無法訪問/WEB-INF/views下的jsp的解決方法,非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • jdbc中class.forname的作用

    jdbc中class.forname的作用

    這篇文章主要介紹了jdbc中class.forname的作用,使用示例說明了他作用及使用方法,大家參考使用吧
    2014-01-01

最新評論

金山区| 宁乡县| 定兴县| 昌吉市| 永平县| 临海市| 三门县| 贞丰县| 清丰县| 彝良县| 凌源市| 玉山县| 砚山县| 任丘市| 当涂县| 南召县| 获嘉县| 安塞县| 托克托县| 贡觉县| 佛教| 扶余县| 仙游县| 石屏县| 揭西县| 盈江县| 罗田县| 武宁县| 广丰县| 界首市| 山东| 合江县| 高青县| 霍邱县| 普兰店市| 额尔古纳市| 临沂市| 盐城市| 游戏| 临沭县| 昂仁县|