原型模式-Prototype Pattern

原文地址:https://jaune162.blog/design-pattern/prototype-pattern/

引言

在Java中如果我们想要拷贝一个对象应该怎么做?第一种方法是使用 gettersetter方法一个字段一个字段设置。或者使用 BeanUtils.copyProperties() 方法。这种方式不仅能实现相同类型之间对象的拷贝,还可以实现不同类型之间的拷贝。

如果仅考虑相同对象之间的拷贝,有没有什么更优雅的方式呢?那就是原型模式。

定义及实现

定义

Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.

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

结构

原型模式就是类中提供一个拷贝方法,用于拷贝一个和自身属性一模一样的对象。

代码实现

第一种方式

public interface Prototype<T> {
   
   
    T copy();
}

@NoArgsConstructor
@Data
public class ConcretePrototype1 implements Prototype<ConcretePrototype1> {
   
   

    private String name;

    private Integer age;

    public ConcretePrototype1(String name, Integer age) {
   
   
        this.name = name;
        this.age = age;
    }

    @Override
    public ConcretePrototype1 copy() {
   
   
        return new ConcretePrototype1(this.name, this.age);
    }
}

public class Main {
   
   

    public static void main(String[] args) {
   
   
        ConcretePrototype1 p1 = new ConcretePrototype1();
        p1.setAge(18);
        p1.setName("prototype1");
        System.out.println(p1);

        ConcretePrototype1 p2 = p1.copy();
        System.out

相关推荐

  1. 设计模式原型模式

    2024-02-17 06:06:02       38 阅读
  2. 设计模式——原型模式

    2024-02-17 06:06:02       32 阅读
  3. 设计模式-原型模式

    2024-02-17 06:06:02       36 阅读
  4. 设计模式-原型模式

    2024-02-17 06:06:02       34 阅读
  5. 设计模式-原型模式

    2024-02-17 06:06:02       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 06:06:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 06:06:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 06:06:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 06:06:02       20 阅读

热门阅读

  1. OpenAI 生成视频模型 Sora 论文翻译

    2024-02-17 06:06:02       30 阅读
  2. uniapp如何给视频组件设置图片

    2024-02-17 06:06:02       30 阅读
  3. ubantu 新建.sh 文件

    2024-02-17 06:06:02       30 阅读
  4. STM32-寄存器和HAL库以及如何使用

    2024-02-17 06:06:02       26 阅读
  5. react中如何做到中断diff过程和恢复

    2024-02-17 06:06:02       28 阅读
  6. Vue3 中应该使用 Ref 还是 Reactive?

    2024-02-17 06:06:02       33 阅读
  7. 【VTKExamples::PolyData】第二十八期 LinearExtrusion

    2024-02-17 06:06:02       23 阅读