理解设计模式——创建型模式(4)原型模式

原型模式

原型模式结构:

  1. “原型”接口 -->(声明克隆方法)
  2. 一个“原型”对象 -->(实现克隆方法)

原型模式特点:

  1. 又叫作“克隆(clone)模式”,原型对象(被复制者)是一个支持克隆(实现克隆方法)的对象。
  2. 能够复制已有对象,而又不用使代码依赖这个对象所属的类。

讲个故事:

原型模式从结构上看比较简单,就不讲故事了,直接上码吧。^ _ ^
原型接口:

// 规定clone方法,接口和抽象类都可以
public abstract class ProtoType{
    public abstract ProtoType clone();
}

再看原型对象:

// 对象内部实现clone方法
public class ConcreteType extends ProtoType{
    @Override
    public ProtoType clone() {
        System.out.println("clone成功");
        return new ConcreteType();
    }
}

客户端代码:

public class client {
    public static void main(String[] args){
        ConcreteType concreteType1 = new ConcreteType();
        ConcreteType concreteType2 = (ConcreteType) concreteType1.clone();
        if(concreteType1 == concreteType2){
            System.out.println("concreteType1 == concreteType2");
        }else{
            System.out.println("concreteType1 != concreteType2");
        }
    }
}

原型模式总结:

  1. 原型模式将克隆过程委派给被克隆的实际对象。这样做有几个好处:
    第一无需依赖被克隆对象的类
    第二避免了外部克隆的弊端:私有变量可能无法复制(外部克隆:新建一个属于相同类的对象,然后遍历原始对象的所有成员变量, 并将成员变量值复制到新对象中);
    第三是可以克隆预生成原型, 避免反复运行初始化代码(被克隆的对象是不会调用构造方法的,因为clone的时候是直接从内存中获取数据的);
    第四是可以方便地生成复杂对象
  2. 一般来说克隆的套路都很相似:创建一个当前类的对象, 然后将原始对象所有的成员变量值复制到新建的类中。当然,具体的克隆过程可以视具体需求而定。
  3. 说到克隆,也就是拷贝,肯定会涉及到深拷贝浅拷贝两个概念,进而涉及到java中的基本类型和引用类型。这些知识这里就不细说了,百度谷歌一下。
  4. 本例中是自己定义了“原型接口”,网上很多原型模式的例子中,是直接让具体对象实现cloneable接口的,而这个接口是定义了clone方法的(ps.这个clone是浅拷贝)。

共同学习,欢迎交流!
这里是源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值