⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 forgivingbuilder.java

📁 本书透彻讲解了经典的《设计模式:可复用面向对象软件的基础》一书涵盖的23种基本设计模式。本书将这些设计模式分成五类:接口型模式、责任型模式、构造型模式、操作型模式
💻 JAVA
字号:
package com.oozinoz.reservation;

/*
 * Copyright (c) 2001 Steven J. Metsker.
 * 
 * Steve Metsker makes no representations or warranties about
 * the fitness of this software for any particular purpose, 
 * including the implied warranty of merchantability.
 *
 * Please use this software as you wish with the sole
 * restriction that you may not claim that you wrote it.
 */
/**
 * This class builds a valid reservation from its attributes,
 * and fills in values where it can if the attributes are not
 * set. This builder must receive a city and a date, but it
 * will set reasonable values for the other reservation values.
 * 
 * @author Steven J. Metsker
 */
public class ForgivingBuilder extends ReservationBuilder 
{
public Reservation build() throws BuilderException 
{
	boolean noHeadcount = (headcount == 0);
	boolean noDollarsPerHead = (dollarsPerHead == 0.0);
	boolean counteroffer = noHeadcount || noDollarsPerHead;
	//
	if (noHeadcount && noDollarsPerHead)
	{
		headcount = MINHEAD;
		dollarsPerHead = MINTOTAL / headcount;
	}
	else if (noHeadcount)
	{
		headcount = (int) Math.ceil(MINTOTAL / dollarsPerHead);
		headcount = Math.max(headcount, MINHEAD);
	}
	else if (noDollarsPerHead)
	{
		dollarsPerHead = MINTOTAL / headcount;
	}
	//
	check();
	return new Reservation(
		date,
		headcount,
		city,
		dollarsPerHead,
		hasSite,
		counteroffer);
}

protected void check() throws BuilderException 
{
	if (date == null)
	{
		throw new BuilderException("Valid date not found");
	}
	if (city == null)
	{
		throw new BuilderException("Valid city not found");
	}
	if (headcount < MINHEAD)
	{
		throw new BuilderException(
			"Minimum headcount is " + MINHEAD);
	}
	if (dollarsPerHead * headcount < MINTOTAL)
	{
		throw new BuilderException(
			"Minimum total cost is " + MINTOTAL);
	}
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -