设计模式之原型模式

244 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

  • 个人简介:微信公众号关注:SteveCode。为您分享更多的知识学术。生于忧患死于安乐
  • 专注Java技术干货分享,Java基础技术、数据结构、相关工具、Spring全家桶、intellij idea......

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

原型模式

问题: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 原型模式的源码分析:Spring 中的 getBean()这个方法低层实现。是否选择单例、和原型模式。

自己的Code

/*******************************************************************************
 * Package: com.example.demo.design.prototype
 * Type:    User
 * Date:    2022-03-06 14:22
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.prototype;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

/**
 * 功能描述: 原型模式分析:
 *  无线创建相同对象  但是对象的地址值都不是相同的
 *
 *
 * @author Songxianyang
 * @date 2022-03-06 14:22
 */
@Data
@Slf4j
public class User implements Cloneable {
    private  String name;
    private int age;
    
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "User{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
    
    @Override
    protected Object clone()  {
        User user =null;
        try {
    
           user = (User) super.clone();
        } catch (CloneNotSupportedException e) {
            log.error("clone: ", "无法或不应克隆对象");
        }
        return user;
    }
}

实现:

/*******************************************************************************
 * Package: com.example.demo.design.prototype
 * Type:    Test
 * Date:    2022-03-06 14:29
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.prototype;

/**
 * 功能描述:
 *
 * @author Songxianyang
 * @date 2022-03-06 14:29
 */
public class Test {
    public static void main(String[] args) {
        User user = new User("sxy", 22);
        System.out.println(user);
        System.out.println(user.clone());
        System.out.println(user.clone());
    
        System.out.println(user==user.clone());
    }
}

在这里插入图片描述 在这里插入图片描述