原型模式就是以一个对象作为原型,克隆出一个与该原型一模一样的对象。
下面举一个例子,对水果进行管理,每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个