前言
原型设计模式系列文章
原型设计模式(一) - 定义、订单拆分
原型设计模式(二) - 订单拆分一般写法实现
原型设计模式(三) - 订单拆分采用原型设计模式进行改进
原型设计模式(四) - 订单拆分采用系统自带的拷贝的方法实现
原型设计模式(五) - 浅拷贝
原型设计模式(六) - 深拷贝
原型设计模式(七) - 使用场景
1. 订单拆分 - 系统自带的拷贝的方法
实现步骤:
1>:首先把IBox类定义成抽象类,让其实现Cloneable接口,并且复写 clone()方法;
2>:然后让CarPartBox继承 IBox类;
3>:然后再定义拆分箱子的类:SplitService,在while语句中直接 用IBox调用系统的 克隆方法clone()即可;
以后可以直接用系统的 clone()方法即可;
2. 代码如下
1>:IBox代码如下:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/6/2 17:14
* Version 1.0
* Params:
* Description: 出货的箱子
*/
public abstract class IBox implements Cloneable{
/**
* 设置箱子的数量
*/
abstract void setNumber(int number) ;
/**
* 有多少货
*/
abstract int getNumber() ;
@Override
protected IBox clone() throws CloneNotSupportedException {
return (IBox) super.clone();
}
}
2>:CartPartBox代码如下:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/6/2 17:17
* Version 1.0
* Params:
* Description: 汽车的零件 - 具体出货的物品
*/
public class CartPartBox extends IBox {
// 汽车个数
private int number ;
// 汽车名称
private String name ;
// 汽车品牌
private String cardBrand ;
@Override
public void setNumber(int number) {
this.number = number ;
}
@Override
public int getNumber() {
return number;
}
public String getCardBrand() {
return cardBrand;
}
public void setCardBrand(String cardBrand) {
this.cardBrand = cardBrand;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3>:订单拆分的 SplitService代码如下:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/6/2 18:42
* Version 1.0
* Params:
* Description: 拆分箱子
*/
public class SplitService {
/**
* 把箱子进行拆分 - 直接采用系统的 clone()方法就可以
*/
public static List<TruckCar> splitBox(IBox box){
List<TruckCar> carList = new ArrayList<>() ;
while (box.getNumber() > 200){
IBox newBox = null ;
try {
// 调用系统自带的 clone()方法
newBox = box.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
newBox.setNumber(200);
TruckCar truckCar = new TruckCar() ;
truckCar.addBox(newBox);
carList.add(truckCar) ;
box.setNumber(box.getNumber() - 200);
}
TruckCar truckCar = new TruckCar() ;
truckCar.addBox(box);
carList.add(truckCar) ;
return carList ;
}
}