Java使用建造者模式實(shí)現(xiàn)辦理手機(jī)套餐功能詳解
本文實(shí)例講述了Java使用建造者模式實(shí)現(xiàn)辦理手機(jī)套餐功能。分享給大家供大家參考,具體如下:
一、模式定義
建造者簡單理解就是造東西,只不過建造者模式建造的不是一個(gè)簡單的東西,是一個(gè)比較復(fù)雜的東西。
二、模式舉例
1 模式分析
我們借用顧客到手杌營業(yè)廳去辦理手機(jī)套餐的例子說明這一模式
經(jīng)過抽象分析后,我們得出下面信息
客戶張三——終端需求
營業(yè)廳操作員——指導(dǎo)者(通知指導(dǎo)建造者生產(chǎn)什么樣的手機(jī)套餐)
計(jì)算機(jī)——建造者(建造各種手機(jī)套餐)
手機(jī)套餐——產(chǎn)品
2 建造者模式靜態(tài)建模
3 代碼示例
3.1 創(chuàng)建產(chǎn)品——手機(jī)套餐
package com.demo.buider.model; public class MobilePackage { // 話費(fèi) 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; /** * 手機(jī)套餐Builder * * @author * */ public interface IMobileBuilder { // 建造手機(jī)套餐的話費(fèi) public void buildMoney(); // 建造手機(jī)套餐的短信 public void buildShortInfo(); // 建造手機(jī)套餐的彩玲 public void buildMusic(); // 返回建造的手機(jī)套餐對象 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 { // 建造手機(jī)套餐的話費(fèi) public void buildMoney() { this.mobilePackage.setMoney(20.0f); } // 建造手機(jī)套餐的彩玲 public void buildMusic() { this.mobilePackage.setMusic("天使"); } // 建造手機(jī)套餐的短信 public void buildShortInfo() { this.mobilePackage.setShortInfo(400); } // 返回建造的手機(jī)套餐對象 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 { // 建造手機(jī)套餐的話費(fèi) public void buildMoney() { this.mobilePackage.setMoney(30.0f); } // 建造手機(jī)套餐的彩玲 public void buildMusic() { this.mobilePackage.setMusic("大海"); } // 建造手機(jī)套餐的短信 public void buildShortInfo() { this.mobilePackage.setShortInfo(600); } // 返回建造的手機(jī)套餐對象 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; /** * 手機(jī)套餐指導(dǎo)者 * * @author maofw * */ public class MobileDirector { public MobilePackage createMobilePackage(IMobileBuilder mobileBuilder) { if (mobileBuilder != null) { // 構(gòu)建話費(fèi) mobileBuilder.buildMoney(); // 構(gòu)建短信 mobileBuilder.buildShortInfo(); // 構(gòu)建彩玲 mobileBuilder.buildMusic(); // 返回手機(jī)套餐 return mobileBuilder.getMobilePackage(); } return null; } }
讓客戶訂購手機(jī)套餐
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("--話費(fèi):" + mobilePackage.getMoney() + "\t短信:" + mobilePackage.getShortInfo() + "條\t彩玲:" + mobilePackage.getMusic()); } }
運(yùn)行結(jié)果
--話費(fèi):20.0短信:400條彩玲:天使
--話費(fèi):30.0短信:600條彩玲:大海
三、該模式設(shè)汁原則
1 分步驟創(chuàng)建復(fù)雜對象
2 構(gòu)造和表示分離
3 單一職責(zé)原則
四、使用場合
1 當(dāng)生成產(chǎn)品對象內(nèi)部具有復(fù)雜結(jié)構(gòu)時(shí)
2 當(dāng)復(fù)雜對象需要與表示分離,可能需要創(chuàng)建不同表示時(shí)
3 當(dāng)需要向客戶隱藏產(chǎn)品內(nèi)部結(jié)構(gòu)表現(xiàn)時(shí)
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
- 詳解java創(chuàng)建一個(gè)女朋友類(對象啥的new一個(gè)就是)==建造者模式,一鍵重寫
- java實(shí)現(xiàn)建造者模式(Builder Pattern)
- Java設(shè)計(jì)模式之Builder建造者模式
- Java設(shè)計(jì)模式之建造者模式實(shí)例詳解
- Java Builder Pattern建造者模式詳解及實(shí)例
- Java運(yùn)用設(shè)計(jì)模式中的建造者模式構(gòu)建項(xiàng)目的實(shí)例解析
- Java設(shè)計(jì)模式之建造者模式(Builder模式)介紹
- java設(shè)計(jì)模式之建造者模式學(xué)習(xí)
- 深入分析JAVA 建造者模式
相關(guān)文章
Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決
這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07教你用java實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)(附詳細(xì)代碼)
教學(xué)管理系統(tǒng)很適合初學(xué)者對于所學(xué)語言的練習(xí),下面這篇文章主要給大家介紹了關(guān)于如何用java實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)的相關(guān)資料,文中給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下2023-06-06關(guān)于maven環(huán)境的安裝及maven集成idea環(huán)境的問題
Maven 是一個(gè)基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。本文重點(diǎn)給大家介紹關(guān)于maven環(huán)境的安裝及和idea環(huán)境的集成問題,感興趣的朋友一起看看吧2021-09-09