设计模式之原型模式

原型模式(Prototype Pattern)

定义

通过复制现有对象来创建新对象,同时又保持了封装性。

通过复制现有对象来创建新的对象,而不是通过实例化新对象。这样可以提高对象创建的效率,尤其是在对象的创建过程比较昂贵或复杂的情况下

使用场景

  • 当一个对象的构建代价过高时。例如某个对象里面的数据需要访问数据库才能拿到,而我们却要多次构建这样的对象。
  • 当构建的多个对象,均需要处于某种原始状态时,就可以先构建一个拥有此状态的原型对象,其他对象基于原型对象来修改。

主要角色

  1. 抽象原型(Prototype): 定义用于复制自身的接口。通常包含一个克隆方法(Clone),该方法用于创建当前对象的副本。
  2. 具体原型(Concrete Prototype): 实现抽象原型接口,提供实际的克隆方法。客户端可以通过调用克隆方法来复制具体原型的实例。

类图

image-20240105144845950

示例代码

public interface ProductPrototype {
    ProductPrototype copy();
}
@Data
public class Product implements ProductPrototype {
    private String category;
    private String seller;
    private String brand;
    private String name;
    private double price;
    private String description;

    public Product(String category, String seller, String brand) {
        this.category = category;
        this.seller = seller;
        this.brand = brand;
    }

    @Override
    public Product copy() {
        return new Product(this.category, this.seller, this.brand);
    }


    public void showDetails() {
        System.out.println(JSON.toJSONString(this));
    }
}
public class Client {
    public static void main(String[] args) {
        Product product = new Product("手机", "小米旗舰店", "小米");
        Product note12 = product.copy();
        note12.setName("红米Note12");
        note12.setPrice(599.0);
        note12.showDetails();
        Product pro13 = product.copy();
        pro13.setName("小米Pro13");
        pro13.setPrice(1499.0);
        pro13.showDetails();

    }
}

工作中遇到场景

相关推荐

  1. 设计模式原型模式

    2024-03-11 23:02:05       39 阅读
  2. 设计模式原型模式

    2024-03-11 23:02:05       5 阅读
  3. 【前端设计模式原型模式

    2024-03-11 23:02:05       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 23:02:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 23:02:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 23:02:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 23:02:05       18 阅读

热门阅读

  1. 最短路dp,LeetCode 1976. 到达目的地的方案数

    2024-03-11 23:02:05       17 阅读
  2. python界面开发 - filedialog 文件选择对话框

    2024-03-11 23:02:05       21 阅读
  3. MySQL 建表约束

    2024-03-11 23:02:05       20 阅读
  4. Rust新手必看,大神力推的必读书籍

    2024-03-11 23:02:05       21 阅读
  5. npm使用

    2024-03-11 23:02:05       18 阅读
  6. 微信小程序使用npm、miniprogram管理

    2024-03-11 23:02:05       18 阅读
  7. 机器学习介绍

    2024-03-11 23:02:05       16 阅读
  8. Linux中PATH、LIBRARY_PATH、LD_LIBRARY_PATH的作用

    2024-03-11 23:02:05       20 阅读
  9. 怎样开始用selenium进行自动化测试?

    2024-03-11 23:02:05       24 阅读
  10. 2129. 将标题首字母大写

    2024-03-11 23:02:05       19 阅读
  11. Opencv图像平滑处理的方法介绍

    2024-03-11 23:02:05       22 阅读