本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 个人简介:微信公众号关注: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());
}
}