JAVA 原型模式的实现

订单处理系统
现在有一个订单处理系统,里面有一个保存订单的业务功能,需求:每当订单的预定产品数量超过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();
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AIC的学费很贵,半年18000元,大家看看他们教些什么内容吧他们学校的网址http://www.aicsws-sjtu.com/此内容是Java第1到第六章的PPT,希望大家喜欢如果大家觉得好我继续发课程定位“Java程序”课程覆盖SCJP认证所要求的知识点,是J2EE课程体系中的基础课程。本课程面向的学员应该具有基本的编程概念,能够编写简单的程序,并学习过操作系统,数据结构等计算机理论知识。课程选用最新的JDK5.0版本作为开发平台,教学的宗旨是:激发兴趣,理解知识,树立面向对象编程思维。  课程目标 认识Java平台,了解java application和applet的开发,激发学员对Java编程语言的兴趣。 学习和掌握Java变量,运算符,控制结构,数组,方法等基本语法。 培养和建立面向对象编程的思维方式,可以运用封装、继承和多态三大基本特性编写面向对象的程序。 理解和应用Java异常,常用类,IO,集合和多线程等开发技术。 课时安排 总学时:52学时 授课:48学时 (含约20学时实验) 考试:4学时 预备知识 了解和使用操作系统,计算机的基本组成,简单的程序开发技术 参考教材 “Java 程序设计教程” 第5 版 清华大学出版社 “SCJP学习指南” 人民邮电出版社 “Java 编程思想” 第3版 机械工业出版社 教学内容和要求知识点 重要程度 使用频度 难度Java 入门 高 中 易变量和运算符 高 高 中控制结构 高 高 易数组 高 高 中方法 很高 高 中封装 很高 很高 难继承 很高 很高 难多态 很高 高 很难内部类 高 中 难异常和断言 高 高 难常用类 高 很高 中基本数据结构 高 很高 难集合 很高 很高 难IO和串行化 高 中 难知识点 重要程度 使用频度 难度第1章 Java入门 4课时 了解Java程序开发环境,理解JVM的运作机制。 初步认识面向对象编程,Java视一切为对象。 使用输入和输出语句编写简单的Java应用程序。 区分applet与application(浏览器和虚拟机上运行)。 编写简单的applet,并嵌入HTML文档,掌握其运行方法。 掌握编程规范,如命名,缩进,空格,空行等。 使用javac, java, appletviewer等命令编译和运行application和applet。第2章 面向过程(变量和控制结构) 4课时 掌握变量的内存概念,8种基本类型,字面值和赋值。 正确使用各种Java运算符,如一元运算符,算术运算符,关系运算符,逻辑运算符,条件运算符和赋值运算符等。 辨别使用if,if…else,switch选择结构执行不同的动作。 辨别使用while,for,do…while循环结构执行不同的动作。 使用程序控制语句break和continue。 使用基本类型的包装器类,理解装箱和拆箱。 [*]了解Java内存机制:栈、堆、常量池等,理解垃圾回收机制。第3章 面向过程(数组和方法) 4课时 理解如何声明数组、构造数组、初始化数组以及使用数组中的各个元素。 清楚数组作为对象处理,创建数组对象时指定数组大小。 能够声明和操作多维数组。 掌握定义方法(声明方法)和调用方法,通过参数和返回值传递数据。 理解实际参数与形式参数以及参数类型的提升(隐式转型)。 掌握方法重载(overload)的基本要求。 区别和掌握按值传递与按引用传递。第4章 面向对象(封装) 4课时 理解类封装属性(数据成员)和行为(方法成员),区别类和对象。 能够定义类,创建类的对象(实例化类)和通过对象引用访问数据成员和方法成员;形成定义类和使用类的两种不同的思维方式。 理解构造函数的作用(分配对象空间),理解和定义重载的构造函数。 明白this引用的两种用法。 弄清对象类型与基本类型的区别。 掌握private, public访问控制符。 理解和使用关
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值