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

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

订单处理系统
现在有一个订单处理系统,里面有一个保存订单的业务功能,需求:每当订单的预定产品数量超过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();
}
}
目录
相关文章
|
关系型数据库 测试技术 调度
《领域驱动设计》:从领域视角深入仓储(Repository)的设计和实现
本文首先从聚合根的生命周期和生存环境出发,引出了Repository概念,并说明其本质是管理中间过程的集合容器(2.1节); 根据集合容器的概念,在领域角度去挖掘出Repository的职责,并提出了仓储实体转移模式用作对不同仓储实现的对比标准(2.2节); 然后从实现例子出发,介绍了一种纯内存实现的仓储,用作体现仓储最佳实现(3.1节); 继续从实现例子出发,介绍了关系型数据库下的仓储特点,并描述面向持久化的仓储的特点(3.4节);
|
前端开发 架构师 Java
领域驱动设计DDD从入门到代码实践
在本文中,作者将借鉴《实现领域驱动设计》的做法,介绍领域驱动设计的基本概念的同时,用一个虚拟的公司和一个虚拟的项目,把领域驱动设计进行落地实践。
15003 11
领域驱动设计DDD从入门到代码实践
|
存储 安全 NoSQL
项目终于用上了 Spring 状态机,非常优雅!
项目终于用上了 Spring 状态机,非常优雅!
|
SQL 数据库 C语言
使用交互方式实现数据查询、插入、修改和删除操作
本次实验主要介绍如何在RDS-SQLServer数据库中使用交互方式实现数据查询、插入、修改和删除操作。
|
算法
谈一谈|浅谈单纯形法其中奥妙
谈一谈|浅谈单纯形法其中奥妙
373 0
|
存储 SQL 关系型数据库
【MySQL】库结构的增删查改操作(DDL)
字符集控制存储数据时所使用的语言文字,比如utf8就可以使用中文。输入show charset;可以查看数据库支持的所有字符集:
|
领域建模 微服务
案例教你一步步设计DDD微服务项目(上)
DDD战略设计从事件风暴开始,然后我们要找出实体等领域对象,找出聚合根构建聚合,划分限界上下文,建立领域模型。 战术设计从事件风暴的命令开始,识别和设计服务,建立各层服务的依赖关系,设计微服务内的实体和值对象,找出微服务中所有的领域对象,并建立领域对象与代码对象的映射关系。
370 0
案例教你一步步设计DDD微服务项目(上)
|
前端开发 Java Maven
从零开始实现放置游戏(七)——实现后台管理系统(5)参数校验
前面几章实现了在RMS系统中进行数据的增删查改以及通过Excel批量导入。但仍有遗留的问题,比如在新增或编辑时,怪物的生命值、护甲等数据我们可以输入负值,这种数据是不合理且没有意义的。本章我们就实现服务端对参数的校验。
从零开始实现放置游戏(七)——实现后台管理系统(5)参数校验
|
API 数据库
EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子
原文:EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子 本章节讲解EF里的继承映射关系,分为TPH、TPT、TPC。具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discriminator列用来区分基类和子类的数据。
1565 0
|
uml
UML精粹学习 - 订单类结构图
Order Class Diagram of Martin Fowler's UML Distilled  
1552 0