建造者模式——办理手机套餐

一模式定义

建造者简单理解就是造东西,只不过建造者模式建造的不是一个简单的东西,是一个比较复杂的东西。

 

二模式举例

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当需要向客户隐藏产品內部结构表现时



 

posted on 2016-10-01 07:47  爱你一万年123  阅读(135)  评论(0编辑  收藏  举报

导航