Prototype —原型模式二

  Java 中的克隆方法

在Java 语言中已提供了clone 方法,定义在Object 类中。下面看看怎么使用Java 里面的克隆方法来实现原型模式。

需要具有克隆功能的类,只需要实现java.lang.Cloneable接口,这个接口没有需要实现的方法,是一个标识接口。

Java 设计模式 之 原型模式(Prototype)(二) - 低调的华丽 - 辉色空间

public interface OrderApi {

        public int getOrderProductNum();
        public void setOrderProductNum(intnum);
        /**
         * 克隆方法
         * @return 订单原型的实例
         */
       public Obeject clone()throws CloneNotSupportedException ;

/**
 * 个人订单对象
 *
 */

public class PersonalOrderimplements OrderApi , Cloneable{

          private String customerName;
          private String productId;
          private int orderProductNum= 0;
 
          @Override
          public int getOrderProductNum() {
                  return this.orderProductNum;
          }

          @Override
          public void setOrderProductNum(intnum) {
                 this.orderProductNum= num;
          }

          @Override
          public Objectclone() throws CloneNotSupportedException {

                 // 与自定义克隆方法的区别
                 PersonalOrder order = (PersonalOrder)super.clone();

                 return order;
         }

         @Override
         public String toString() {
                 return "订购人是 =" + this.customerName+ ",订购产品是 =" +this.productId+

                               ",订购的数量为=" +this.orderProductNum;
         }

        省略setter 和 getter.........

}

/**
 * 企业订单对象
 *
 */

public class EnterpriseOrderimplements OrderApi , Cloneable{

          private String enterpriseName;
          private String productId;
          private intorderProductNum = 0;
 
         @Override
         public int getOrderProductNum() {
                   return this.orderProductNum;
         }

         @Override
         public void setOrderProductNum(intnum) {
                  this.orderProductNum= num;
         }

         @Override
         public Objectclone()  throwsCloneNotSupportedException {

                 // 与自定义克隆方法的区别
                  EnterpriseOrder order = (EnterpriseOrder )super.clone();

                  return order;
        }

        @Override
        public String toString() {
                  return "订购企业是=" +this.enterpriseName+ ",订购产品是=" + this.productId+
                              ",订购数量为=" + this.orderProductNum;
        }

        省略setter 和 getter.........
}

public class OrderBusiness {

          public static final int ORDER_NUMBER_MAX= 1000;
          public void saveOrder(OrderApi order)throws CloneNotSupportedException{
                    int orderCount = 1;
                    OrderApi newOrder = null;
                    while(order.getOrderProductNum() >ORDER_NUMBER_MAX){
                           newOrder = (OrderApi)order.clone();
                           newOrder.setOrderProductNum(ORDER_NUMBER_MAX);
                           order.setOrderProductNum(order.getOrderProductNum() - ORDER_NUMBER_MAX);
                           System.out.println("订单_" + orderCount + "== " + newOrder);
                           orderCount++;
                   }
                   System.out.println("订单_" + orderCount + " == " + order);
         }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值