设计模式10--原型模式(Prototype)

原型模式的本质:克隆生成对象

模式的定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

package com;

public interface OrderApi {
	
	int getOrderProductNum();
	
	void setOrderProductNum(int num);
	
	/*
	 * 克隆方法,返回原型的实例
	 */
	public OrderApi cloneOrder();
}
package com.impl;

import com.OrderApi;

public class EnterpriseOrder implements OrderApi {
	
	private String companyName;
	private String productId;
	private int orderProductNum;

	
	public String getCompanyName() {
		return companyName;
	}

	public void setCompanyName(String companyName) {
		this.companyName = companyName;
	}

	public String getProductId() {
		return productId;
	}

	public void setProductId(String productId) {
		this.productId = productId;
	}

	@Override
	public OrderApi cloneOrder() {
		EnterpriseOrder order = new EnterpriseOrder();
		order.setCompanyName(companyName);
		order.setProductId(productId);
		order.setOrderProductNum(orderProductNum);
		return order;
	}
         //@Override使用java Object对象的clone方法,被克隆的对象要implements Cloneable
         //public Object clone()  {
                //Object newOrder = null;
                //try {
                     //newOrder = super.clone();
                //} catch (CloneNotSupportedException e) {
                     //e.printStackTrace();
                //}
                //return newOrder;
        //} 
     	@Override
	public int getOrderProductNum() {
		return orderProductNum;
	}

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

	}

	public String toString() {
		return new StringBuffer().append("productId=" + productId).append(
				",companyName=" + companyName).append(
				",orderProductNum=" + orderProductNum).toString();
	}
}
package com.impl;

import com.OrderApi;

public class PersonalOrder implements OrderApi {

	private String customerName;
	private String productId;
	private int orderProductNum;

	public String getCustomerName() {
		return customerName;
	}

	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}

	public String getProductId() {
		return productId;
	}

	public void setProductId(String productId) {
		this.productId = productId;
	}

	@Override
	public OrderApi cloneOrder() {
		PersonalOrder order = new PersonalOrder();
		order.setCustomerName(customerName);
		order.setProductId(productId);
		order.setOrderProductNum(orderProductNum);
		return order;
	}
         //@Override使用java Object对象的clone方法,被克隆的对象要implements Cloneable
         //public Object clone()  {
                //Object newOrder = null;
                //try {
                    //newOrder = super.clone();
                //} catch (CloneNotSupportedException e) {
                    //e.printStackTrace();
                //}
               //return newOrder;
         //}       
	@Override
	public int getOrderProductNum() {
		return orderProductNum;
	}

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

	public String toString() {
		return new StringBuffer().append("productId=" + productId).append(
				",customerName=" + customerName).append(
				",orderProductNum=" + orderProductNum).toString();
	}
}
package com;

public class OrderBusiness {
	
	public void saveOrder(OrderApi order){
		while(order.getOrderProductNum()>1000){
			OrderApi newOrder = order.cloneOrder();
			newOrder.setOrderProductNum(1000);
			System.out.println("拆分生成订单:" + order);
			order.setOrderProductNum(order.getOrderProductNum() - 1000);
		}
		System.out.println("订单:" + order);
	}
}
import com.OrderBusiness;
import com.impl.EnterpriseOrder;

public class Client {
	public static void main(String[] args) {
		EnterpriseOrder enterpriseOrder = new EnterpriseOrder();
		enterpriseOrder.setCompanyName("SHIXIN747.COMPANY");
		enterpriseOrder.setProductId("010");
		enterpriseOrder.setOrderProductNum(2500);
		OrderBusiness orderBusiness = new OrderBusiness();
		orderBusiness.saveOrder(enterpriseOrder);
	}
}






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值