Java使用建造者模式實(shí)現(xiàn)辦理手機(jī)套餐功能詳解
本文實(shí)例講述了Java使用建造者模式實(shí)現(xiàn)辦理手機(jī)套餐功能。分享給大家供大家參考,具體如下:
一、模式定義
建造者簡(jiǎn)單理解就是造東西,只不過(guò)建造者模式建造的不是一個(gè)簡(jiǎn)單的東西,是一個(gè)比較復(fù)雜的東西。
二、模式舉例
1 模式分析
我們借用顧客到手杌營(yíng)業(yè)廳去辦理手機(jī)套餐的例子說(shuō)明這一模式
經(jīng)過(guò)抽象分析后,我們得出下面信息
客戶張三——終端需求
營(yí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ī)套餐對(duì)象
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ī)套餐對(duì)象
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ī)套餐對(duì)象
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;
}
}
讓客戶訂購(gòu)手機(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ù)雜對(duì)象
2 構(gòu)造和表示分離
3 單一職責(zé)原則
四、使用場(chǎng)合
1 當(dāng)生成產(chǎn)品對(duì)象內(nèi)部具有復(fù)雜結(jié)構(gòu)時(shí)
2 當(dāng)復(fù)雜對(duì)象需要與表示分離,可能需要?jiǎng)?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緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- 詳解java創(chuàng)建一個(gè)女朋友類(對(duì)象啥的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:不支持發(fā)行版本5的超詳細(xì)簡(jiǎn)單解決方案
發(fā)行版本5是Java5,已經(jīng)是十多年前的版本了,現(xiàn)在已經(jīng)不再被支持,如果您使用的是舊版的Java開發(fā)工具,可能會(huì)出現(xiàn)這樣的錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Java:不支持發(fā)行版本5的超詳細(xì)簡(jiǎn)單解決方案,需要的朋友可以參考下2024-01-01
mybatis關(guān)聯(lián)關(guān)系映射的實(shí)現(xiàn)
MyBatis的關(guān)聯(lián)關(guān)系映射在復(fù)雜數(shù)據(jù)模型中至關(guān)重要,使開發(fā)人員能夠以最靈活的方式滿足不同項(xiàng)目的需求,本文就來(lái)介紹一下mybatis關(guān)聯(lián)關(guān)系映射的實(shí)現(xiàn),感興趣的可以了解一下2023-09-09
淺談MyBatis通用Mapper實(shí)現(xiàn)原理
這篇文章主要介紹了淺談MyBatis通用Mapper實(shí)現(xiàn)原理,本文會(huì)先介紹通用 Mapper 的簡(jiǎn)單原理,然后使用最簡(jiǎn)單的代碼來(lái)實(shí)現(xiàn)這個(gè)過(guò)程。感興趣的小伙伴們可以參考一下2018-10-10
springboot整合redis修改分區(qū)的操作流程
這篇文章主要介紹了springboot整合redis修改分區(qū)的操作流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
springmvc無(wú)法訪問(wèn)/WEB-INF/views下的jsp的解決方法
本篇文章主要介紹了springmvc無(wú)法訪問(wèn)/WEB-INF/views下的jsp的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10

