java设计模式 java对象创建 与 原型模式


基于个人理解,如有错误,请留言。

java创建新对象的四种方式。

1、通过new关键字创建对象。(需要调用构造函数)
2、通过反射创建对象。(需要调用构造函数)
3、实现cloneable接口,通过原型方式创建对象。(不需要调用构造函数)
4、实现Serializable接口,通过序列化与反序列化创建对象。(不需要调用构造函数)

#Singleton类定义

package com.company;
import java.io.Serializable;

public class Singleton implements Cloneable, Serializable {

    private static  volatile Singleton _instance;
//    private Singleton(){
//        System.out.println("创建新的实例。。。。");
//    }

    public Singleton(){
        System.out.println("创建新的实例。。。。");
    }

    public static Singleton share(){

        if ( _instance == null ){
            synchronized ( Singleton.class ){
                if( _instance == null ){
                    _instance = new Singleton();
                }
            }
        }
        return _instance;
    }

    public void sayHello(){
        System.out.println("hello singleton");
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
#Main实现方法中

package com.company;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Main {

    public static void main(String[] args) throws Exception {

		//1.通过new方式创建对象,会调用构造器。
        Singleton singleton = Singleton.share();
        System.out.println(singleton.hashCode());
        singleton.sayHello();

		//2.通过反射方式创建对象,会调用构造器。
        Singleton singleton4 = Singleton.class.newInstance();
        System.out.println(singleton4.hashCode());
        singleton4.sayHello();

        //使用clone方式创建对象,并不走构造器。
        Singleton singleton1 = (Singleton) singleton.clone();
        System.out.println(singleton1.hashCode());
        singleton1.sayHello();

        //使用序列化方式创建对象,不走构造器。
        //序列化对象
        ObjectOutputStream objectOutputStream = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        byteArrayOutputStream = new ByteArrayOutputStream();
        objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeObject(singleton);
        byte[] bytes = byteArrayOutputStream.toByteArray();
        objectOutputStream.flush();
        objectOutputStream.close();;

        //反序列化对象
        ByteArrayInputStream byteArrayInputStream = null;
        byteArrayInputStream = new ByteArrayInputStream(bytes);
        ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
        Singleton singleton2 = (Singleton) objectInputStream.readObject();
        System.out.println(singleton2.hashCode());
        singleton2.sayHello();

    }
}

原型模式

原型模式的概念

原型模式属于对象的创建模式。通过给出一个原型对象来指明所要创建的对象的类型。,然后利用这个原型对象克隆出更多同类型的对象。

思想:
如果创建一个对象的构造函数比较复杂,或者耗时间比较长,或通过创建多个对象来实现,此时最好不要通过new关键字来创建实例并初始化;而是通过对这些对象属性或者方法进行复制来实现创建,这个就是原型模式的最初思想。原型模式原意是创建共享型的对象,java的默认clone方法实现的是浅拷贝模式。即对象中的对象属性时共享的。

java构造函数方式拷贝 与 clone方式拷贝

在复制对象的形式上,有通过构造函数接受同类对象实例 和 clone方式拷贝的方式。


发布了58 篇原创文章 · 获赞 34 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_36723759/article/details/104488979