原型模式

1、什么是原型模式

原型模式是一个创建型的模式。原型二字表明了该模式应该有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象,这个过程也就是我们称的“克隆”。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。

2、原型模式适用场景

(1)类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。 
(2)通过new产生的一个对象需要非常繁琐的数据准备或者权限,这时可以使用原型模式。 
(3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。

Spring框架中的多例就是使用原型。

3、演示实例


/**
 * 作者:程序猿-南巷清风
 * 博客地址:https://blog.csdn.net/weixin_42152604(关注一下下^_^)
 * QQ:1821119445  java开发的朋友们可以加(非诚勿扰好吧!)
 */
public class Book implements Cloneable{
    private String title;//标题
    private ArrayList<String> image = new ArrayList<String>();//图片名称列表
    public Book() {
    }
    //重写克隆方法
    @Override
    protected Book clone() {
        try {
            Book book = (Book) super.clone();//
//            book.image=(ArrayList<String>)this.image.clone();//深复制
            return book;
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
    public void showBook() {
        System.out.println("----------------------Start----------------------");

        System.out.println("title:" + title);
        for (String img : image) {
            System.out.println("image name:" + img);
        }

        System.out.println("----------------------End----------------------");
    }

    public void addImage(String img) {
        this.image.add(img);
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public ArrayList<String> getImage() {
        return image;
    }

    public void setImage(ArrayList<String> image) {
        this.image = image;
    }
}

测试代码:

/**
 * 作者:程序猿-南巷清风
 * 博客地址:https://blog.csdn.net/weixin_42152604(关注一下下^_^)
 * QQ:1821119445  java开发的朋友们可以加(非诚勿扰好吧!)
 */
public class ClientDemo {
    public static void main(String[] args) {
        Book book1 = new Book();
        book1.setTitle("书1");
        book1.addImage("图1");
        book1.showBook();

        Book book2 = book1.clone();
        book2.showBook();
        book2.setTitle("书2");
        book2.addImage("图2");
        book2.showBook();


        book1.showBook();
    }
}

 

4、原型模式分为浅复制和深复制

浅复制——只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做“(浅复制)浅拷贝”,换句话说,浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。

深复制 ——在计算机中开辟了一块新的内存地址用于存放复制的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值