建造者模式——辦理手機套餐

分類:IT技術 時間:2016-10-19

一模式定義

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

二模式舉例

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當需要向客戶隱藏產品內部結構表現時



  • 大小: 15.7 KB
  • 大小: 61.4 KB
  • 大小: 44.2 KB
  • 查看圖片附件

Tags:

文章來源:


ads
ads

相關文章
ads

相關文章

ad