原型模式实例订单处理系统

简介: 原型模式实例订单处理系统

订单处理系统
现在有一个订单处理系统,里面有一个保存订单的业务功能,需求:每当订单的预定产品数量超过1000的时候,就需要把订单拆成两份订单来保存。如果拆成两份后还是超过1000,则继续拆分,直到每份产品预订数量不超过1000.
根据业务,目前的订单系统分成两种,一种是个人订单、一种是公司订单。
客户名称、产品对象(ID,Name),订购产品数量。
公司名称、产品对象(ID,Name),订购产品数量。

在这里插入图片描述

/**
代码具体实现

*/

package proto;

/**
 产品类,用于原型模式中的深复制
有ID 和NAME两个参数

*/


public class Product implements Cloneable {
private int id;
private String name;
public Product(int id, String name) {
    super();
    this.id = id;
    this.name = name;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Product clone()
{
    Product product=null;
    try {
        product=(Product)super.clone();
    } catch (CloneNotSupportedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return product;
}
}
package proto;
/**

订单类,含有产品的对象并进行深复制

*/


public class order implements Cloneable {
private  String orderName;
private  Product product;
private  int number;
public order()
{}

public order(String orderName, Product product, int number) {
    super();
    this.orderName = orderName;
    this.product = product;
    this.number = number;
}
public String getOrderName() {
    return orderName;
}
public void setOrderName(String orderName) {
    this.orderName = orderName;
}
public Product getProduct() {
    return product;
}
public void setProduct(Product product) {
    this.product = product;
}
public int getNumber() {
    return number;
}
public void setNumber(int number) {
    this.number = number;
}
public order clone()
{
    order order=null;
    try {

        order=(order)super.clone();
        order.product=(Product)this.product.clone();
    } catch (CloneNotSupportedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return order;

}
public void show()
{
    System.out.println("订单数量: "+this.getNumber());
    System.out.println("产品id: "+this.getProduct().getId());
    System.out.println("产品名称: "+this.getProduct().getName());
    System.out.println("用户名称: "+this.getOrderName());
}
}
package proto;
/**

订单处理类
 运用迭代的思想对订单进行处理
 两次clone

*/


public class dealOrder {
private order order1;

public dealOrder(order order)
{
    this.order1=order;
}
public  order deal()
{


    order halforder=null;
    if(order1.getNumber()<1000)
        halforder=this.order1.clone();
    else
    {
    while(order1.getNumber()>=1000)
    {

        halforder=this.order1.clone();
        halforder.setNumber(this.order1.getNumber()/2);
        this.order1=halforder.clone();

    }
    }
    return halforder;

}
}
package proto;

public class Clinte {

/**
 * 主界面类
 */
public static void main(String[] args) {
    Product p1=new Product(1,"高数课本");
    order o1=new order("张三",p1,3400);
    dealOrder d1=new dealOrder(o1);
    int i=0;
    i=o1.getNumber()/d1.deal().getNumber();


    System.out.println("一共有"+i+"份订单");
    System.out.println("订单样例如下");
    d1.deal().show();
}
}
目录
相关文章
|
设计模式 安全 Java
JAVA设计模式1:单例模式,确保每个类只能有一个实例
JAVA设计模式1:单例模式,确保每个类只能有一个实例
115 0
|
24天前
|
数据可视化 UED
AnimationController 类的使用场景
【10月更文挑战第18天】这些只是 `AnimationController`类的一部分使用场景,实际上它的应用范围非常广泛,可以根据具体的需求和创意来发挥其作用,为应用添加更多的活力和魅力。在使用 `AnimationController`时,需要结合其他动画组件和相关的动画逻辑来实现具体的动画效果,同时要注意合理控制动画的时长、速度和节奏,以确保动画效果的自然和流畅。
|
4月前
|
移动开发
交易链路设计原则&模式问题之在订单管理系统中,doOp接口实现多种按钮操作,如何解决
交易链路设计原则&模式问题之在订单管理系统中,doOp接口实现多种按钮操作,如何解决
支付系统22------统一收单下单并支付页面接口-----调用支付宝接口,创建订单后期出现异常,能够打印出来的方法
支付系统22------统一收单下单并支付页面接口-----调用支付宝接口,创建订单后期出现异常,能够打印出来的方法
|
6月前
|
设计模式 Java 关系型数据库
Java设计模式--创建模式工厂--用披萨订购案例 详细讲解三种工厂模式
Java设计模式--创建模式工厂--用披萨订购案例 详细讲解三种工厂模式
|
存储 设计模式
【设计模式】【第四章】【订单状态流转】【状态模式 + 享元模式+模板方法模式】
【设计模式】【第四章】【订单状态流转】【状态模式 + 享元模式+模板方法模式】
125 0
代理模式实例订单系统
代理模式实例订单系统
121 0
代理模式实例订单系统
状态模式实例请假流程
状态模式实例请假流程
141 0
状态模式实例请假流程
|
XML 数据库 数据格式
工厂方法模式实例公司系统
工厂方法模式实例公司系统
97 0
工厂方法模式实例公司系统
|
消息中间件 数据库 RocketMQ
创建支付订单流程|学习笔记
快速学习创建支付订单流程
362 0
创建支付订单流程|学习笔记