原型设计模式(四) - 订单拆分采用系统自带的拷贝的方法实现

前言

原型设计模式系列文章
原型设计模式(一) - 定义、订单拆分
原型设计模式(二) - 订单拆分一般写法实现
原型设计模式(三) - 订单拆分采用原型设计模式进行改进
原型设计模式(四) - 订单拆分采用系统自带的拷贝的方法实现
原型设计模式(五) - 浅拷贝
原型设计模式(六) - 深拷贝
原型设计模式(七) - 使用场景

1. 订单拆分 - 系统自带的拷贝的方法


实现步骤:
1>:首先把IBox类定义成抽象类,让其实现Cloneable接口,并且复写 clone()方法;
2>:然后让CarPartBox继承 IBox类;
3>:然后再定义拆分箱子的类:SplitService,在while语句中直接 用IBox调用系统的 克隆方法clone()即可;

以后可以直接用系统的 clone()方法即可;

2. 代码如下


1>:IBox代码如下:
/**
 * Email: [email protected]
 * 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: [email protected]
 * 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: [email protected]
 * Created by Novate 2018/6/2 18:42
 * Version 1.0
 * Params:
 * Description:    拆分箱子
 */

public class SplitService  {

    /**
     * 把箱子进行拆分 - 直接采用系统的 clone()方法就可以
     */
    public static List splitBox(IBox box){
        List 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 ;
    }
}

这里只是写和之前不一样的代码,其他类的代码都一样,没有变化;

4. 原型设计模式UML图如下所示


原型设计模式(四) - 订单拆分采用系统自带的拷贝的方法实现_第1张图片
图片.png

你可能感兴趣的:(原型设计模式(四) - 订单拆分采用系统自带的拷贝的方法实现)