欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-27 16:13:12
...

一模式定义

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

 

二模式举例

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