JAVA 设计模式之原型模式

本文介绍了一种设计模式——原型模式,该模式通过拷贝原型实例来创建新的对象,以此达到保护原始数据并隐藏复制过程的目的。文章提供了一个具体的Java实现案例,包括接口定义、实现类以及工厂类等,展示了如何使用深克隆和浅克隆来创建对象副本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

目的:保护最原始的一份存档,隐藏复制过程。

==================接口===============================

public interface IOrder extends ProtoType {
    int getOrderNumber();
    void setOrderNumber(int orderNumber);
    String getOrderName();
    void setOrderName(String orderName);
}

==============父接口拷贝副本=====================

interface ProtoType {
    ProtoType cloneProtoType();
}

=================实现IOrder 的子类===============================

public class PersonOrder implements IOrder {
   private String orderName;
   private int orderNumber;// 属性为基本属性 为浅克隆
   private ArrayList list; // 属性为对象 则为深克隆
// 拷贝副本 包含所有数据
    @Override
    public ProtoType cloneProtoType() {
        PersonOrder personOrder = new PersonOrder();
        personOrder.setOrderNumber(orderNumber);
        personOrder.setOrderName(orderName);
        personOrder.list= new ArrayList();
        return personOrder;
    }


    @Override
    public int getOrderNumber() {
        return this.orderNumber;
    }

    @Override
    public void setOrderNumber(int orderNumber) {
        this.orderNumber = orderNumber;
    }

    @Override
    public String getOrderName() {
        return this.orderName;
    }

    @Override
    public void setOrderName(String orderName) {
        this.orderName=orderName;
    }
}

======================处理order 的工厂============================

public class OrderDealFactory {
    public void dealOrder(IOrder order){
        int number = order.getOrderNumber();
        while (number>0){
            System.out.println("原始订单:" + order.hashCode());
            IOrder iOrder = null;
            iOrder = (IOrder)order.cloneProtoType();
            iOrder.setOrderNumber(number>=1000?1000:number);
            System.out.println("newOrder" + iOrder.hashCode() + " number:" + iOrder.getOrderNumber());
            number -= 1000;

        }
    }
}

+++++++++++++++++++++++调用++++++++++++++++++++++++++++++

public class Client {
    @Test
    public void test(){
        OrderDealFactory orderDealFactory = new OrderDealFactory();
        PersonOrder personOrder = new PersonOrder();
        personOrder.setOrderName("student");
        personOrder.setOrderNumber(4500);
        orderDealFactory.dealOrder(personOrder);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值