设计模式之原型模式

原型模式

  • 深克隆和浅克隆:

    ​ Clone在Java中是一种常见的操作,目的是为了获取对象的副本。所以就产生了两种克隆方式(深克隆、浅克隆)。

    1. 深克隆:深克隆其实就是复制出一个对象的副本(分配内存,复制粘贴),也就是创建了一个和原来一样的对象,属性中的引用也就变成了副本的地址,不会指向原对象。
    2. 浅克隆:顾名思义,就是不会去分配内存来创建新的对象,而是依旧使用原对象,属性中的引用指向原对象。
    深克隆浅克隆
    内存地址不同,但属性相同,是两个对象内存地址和属性都相同,是一个对象
  • 定义:

    ​ 用一个已经创建的实例最为原型模型,然后复制该原型对象来创建出一个与其相同或者相似的对象。用这种方式创建对象非常高效,并且无需知道对象创建的细节。

  • 使用场景:

    1. 需要创建很多相同或者相似对象,因为clone比new效率要高很多。

    2. 资源优化场景。

    3. 性能和安全有要求的场景。

  • UML:

    1. Propotype:原型模式的抽象类。

    2. ConcretePropotype1和ConcretePropotype2:具体的原型类。

在这里插入图片描述

  • 优点:

    1. 使用原型模式比直接new对象更有效率,因为直接操作二进制流,特别是复制大对象时,性能的差别非常明显。
    2. 隐藏了制造新实例对象的复杂性,让创造对象像复制粘贴一样简单。
  • 缺点:

    1. 使用原型模式复制对象不会调用构造方法,所以原型模式无法和单例模式组合使用。
    2. 原型模式不能有final对象。
    3. Object类的clone方法只会拷贝基本数据类型,对于数组、对象需要另行拷贝。(深拷贝、浅拷贝问题)
  • 样例:

    public abstract class Prototype implements Cloneable{
        private String id ;
        
        public Prototype(){
            this.id = id ;
        }
        
        public String getId(){
            return this.id ;
        }
        
        public Prototype clone() throws CloneNotSupportedException{
            return (Propotype) super.clone() ;
        }
    }
    
    public class CreateProtype extends Prototype{
        
        public CreateProtype(String id){
            super(id) ;
        }
    }
    
    public class JavaDemo{
        
        public static void main(String args[]){
            
            Propotype p1 = new CreateProtype("1") ;
            Porpotype p2 = p1.clone() ;
            
            System.out.println(p1 == p2) ;
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值