本文實例講述了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程序設計有所幫助。