java设计模式之——原型模式

原型模式就是以一个对象作为原型,克隆出一个与该原型一模一样的对象。

下面举一个例子,对水果进行管理,每100个就分为一袋,而这个“一袋”就是一个对象

import java.util.ArrayList;
import java.util.List;

/**
 * 一袋水果
 * 
 * @author Administrator
 * 
 */
interface ABagOfFruits
{
	/**
	 * 设置一袋水果的数量
	 * 
	 * @param num
	 */
	public void setFruitsNumber(int num);

	/**
	 *获取本袋水果的数量
	 */
	public int getFruitsNumber();

	/**
	 * 克隆本对象
	 * 
	 * @return
	 */
	public ABagOfFruits cloneSelf();
}

/**
 * 一袋苹果
 * 
 * @author Administrator
 * 
 */
class ABagOfApples implements ABagOfFruits
{

	private int appleNumbers;

	@Override
	public void setFruitsNumber(int num)
	{
		this.appleNumbers = num;
	}

	@Override
	public ABagOfFruits cloneSelf()
	{
		ABagOfFruits aBagOfFruits = new ABagOfApples();
		aBagOfFruits.setFruitsNumber(appleNumbers);
		return aBagOfFruits;
	}

	@Override
	public int getFruitsNumber()
	{
		return this.appleNumbers;
	}

}

/**
 * 一袋橘子
 * 
 * @author Administrator
 * 
 */
class ABagOfOranges implements ABagOfFruits
{

	private int orangeNumbers;

	@Override
	public void setFruitsNumber(int num)
	{
		this.orangeNumbers = num;
	}

	@Override
	public ABagOfFruits cloneSelf()
	{
		ABagOfFruits aBagOfFruits = new ABagOfOranges();
		aBagOfFruits.setFruitsNumber(orangeNumbers);
		return aBagOfFruits;
	}

	@Override
	public int getFruitsNumber()
	{
		return this.orangeNumbers;
	}

}

/**
 * 水果管理器
 * 
 * @author Administrator
 * 
 */
class FruitsManger
{

	private FruitsManger()
	{

	}

	/**
	 * 水果管理方法,一袋水果最多100个
	 * @param aBagOfFruits
	 */
	public static void manageFruits(ABagOfFruits aBagOfFruits)
	{
		List<ABagOfFruits> fruits = new ArrayList<ABagOfFruits>();

		while (aBagOfFruits.getFruitsNumber() > 100)
		{
			ABagOfFruits aNewBagOfFruits = aBagOfFruits.cloneSelf();
			aNewBagOfFruits.setFruitsNumber(100);

			aBagOfFruits.setFruitsNumber(aBagOfFruits.getFruitsNumber() - 100);

			System.out.println("分了一袋水果,数量为:" + 100 + "个");

			fruits.add(aBagOfFruits);

		}
		System.out
				.println("分了一袋水果,数量为:" + aBagOfFruits.getFruitsNumber() + "个");
		fruits.add(aBagOfFruits);
	}
}

/**
 * 测试类
 * 
 * @author Administrator
 * 
 */
public class Test
{
	public static void main(String[] args)
	{
		System.out.println("管理205个苹果");
		ABagOfFruits aBagOfApples = new ABagOfApples();
		aBagOfApples.setFruitsNumber(205);
		FruitsManger.manageFruits(aBagOfApples);
		
		System.out.println("----------------------------");
		
		System.out.println("管理557个橘子");
		ABagOfFruits aBagOfOranges = new ABagOfOranges();
		aBagOfOranges.setFruitsNumber(557);
		FruitsManger.manageFruits(aBagOfOranges);
	}
}


屏幕打印结果如下:

管理205个苹果
分了一袋水果,数量为:100个
分了一袋水果,数量为:100个
分了一袋水果,数量为:5个
----------------------------
管理557个橘子
分了一袋水果,数量为:100个
分了一袋水果,数量为:100个
分了一袋水果,数量为:100个
分了一袋水果,数量为:100个
分了一袋水果,数量为:100个
分了一袋水果,数量为:57个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值