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

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

订单处理系统
现在有一个订单处理系统,里面有一个保存订单的业务功能,需求:每当订单的预定产品数量超过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();
}
}
目录
相关文章
每日一道面试题之try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
每日一道面试题之try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
302 0
|
关系型数据库 测试技术 调度
《领域驱动设计》:从领域视角深入仓储(Repository)的设计和实现
本文首先从聚合根的生命周期和生存环境出发,引出了Repository概念,并说明其本质是管理中间过程的集合容器(2.1节); 根据集合容器的概念,在领域角度去挖掘出Repository的职责,并提出了仓储实体转移模式用作对不同仓储实现的对比标准(2.2节); 然后从实现例子出发,介绍了一种纯内存实现的仓储,用作体现仓储最佳实现(3.1节); 继续从实现例子出发,介绍了关系型数据库下的仓储特点,并描述面向持久化的仓储的特点(3.4节);
|
Java 应用服务中间件
IDEA Error:(7, 26) java: 程序包javax.servlet.http不存在
IDEA Error:(7, 26) java: 程序包javax.servlet.http不存在
3088 0
IDEA Error:(7, 26) java: 程序包javax.servlet.http不存在
|
SQL Arthas 运维
取经阿里十年技术大佬,得到Java线上问题排查攻略!
再牛逼的程序员都写不出完美无缺的代码,作为后端开发工程师,一不小心就会遇到线上故障。如果线上故障处理不及时,就可能导致各种严重的后果。恰好最近部门出现了一次挺严重但幸运的是影响面不大的线上故障,最后在阿里工作十年的leader分享了线上问题的排查思路。结合这次分享,写下了这篇Java线上问题排查攻略。
数据一致性-对账
一致性分为强一致性和弱一致性。 强一致性的协议和手段主要有:二阶段提交(2PC)、三阶段提交(3PC)、TCC(Try-Confirm-Cancel)补偿型。这里面经常有人把两阶段提交和TCC补偿型混淆。二阶段提交实际上业务逻辑是在提交之前做的,两阶段只是事务控制的两个阶段。而TCC是将业务逻辑分为try、confirm和cancel三个阶段。举个例子:比如一个人要预售苹果,有两种销售策略。一种让用户先付钱,根据用户需求量准备足够的苹果。另一种是让用户先付钱同时声明到时候先到先得,没抢到的就退款。第一种就是二阶段提交,第二种就是TCC。弱一致性在分布式系统中常用的是一种特例:最终一致性。
1100 0
数据一致性-对账
|
前端开发 架构师 Java
领域驱动设计DDD从入门到代码实践
在本文中,作者将借鉴《实现领域驱动设计》的做法,介绍领域驱动设计的基本概念的同时,用一个虚拟的公司和一个虚拟的项目,把领域驱动设计进行落地实践。
14835 11
领域驱动设计DDD从入门到代码实践
|
SQL Java 数据库连接
MyBatis常见面试题和答案(2020最新版)
MyBatis常见面试题和答案(2020最新版)
393 0
|
缓存 应用服务中间件 数据库
淘宝服务端高并发分布式架构演进之路
淘宝服务端高并发分布式架构演进之路
312 0
|
存储 安全 NoSQL
项目终于用上了 Spring 状态机,非常优雅!
项目终于用上了 Spring 状态机,非常优雅!
|
设计模式 运维 监控
详解命令模式本质及其在高复杂调用中的应用案例—履约ERP架构总结
一、前言本文是基于作者在库存协同相关系统设计中使用命令模式并获得很好成果的分享想法而撰写的。命令模式是一种设计模式,总结了在特定场景下的最佳设计实践,它是一种间接经验。为了将这种间接经验变为我们可以使用的直接经验,我们需要做到两点:看清模式本质和灵活运用。模式本质:掌握一个设计模式的关键在于发现其核心关注点。每个模式都有一个关注点,例如命令模式的关注点是调用过程,而策略模式和状态模式的类图看起来相
详解命令模式本质及其在高复杂调用中的应用案例—履约ERP架构总结