原型模式的学习与使用

1、原型模式的学习

  当我们需要创建一个对象,并且该对象的创建过程比较复杂或者耗时时,可以使用原型模式。原型模式通过复制现有对象的属性来创建新的对象,而不是从头开始创建。
  在原型模式中,我们定义一个原型接口或抽象类,该接口或抽象类定义了克隆方法。具体的原型类实现克隆方法,并根据自身的属性创建新的对象。
  通过使用原型模式,我们可以避免重复创建对象的开销,提高创建对象的效率。它还使得对象的创建更加灵活,因为我们可以根据需要克隆现有对象,而无需依赖于具体的类和构造函数。
  以下是原型模式的一些关键要点:

  • 原型接口或抽象类:定义克隆方法,用于创建新对象的副本。
  • 具体的原型类:实现原型接口或抽象类,并根据自身的属性进行克隆。
  • 客户端:使用原型对象创建新的对象,而无需关心具体的实现细节。
    在这里插入图片描述

2、原型模式的使用

  假设你正在开发一个游戏,其中有一种怪物叫做"巨型哥布林"。每个巨型哥布林都有自己的属性(如血量、攻击力等)和外观(如模型、颜色等)。你需要设计一个原型模式来创建巨型哥布林对象,并能够快速复制多个相同属性的怪物。
具体的原型类

@Data
public class BigGoblin implements Cloneable {

    protected Integer blood;

    protected Integer offensive;

    protected String model;

    protected String colour;

    public BigGoblin(Integer blood, Integer offensive, String model, String colour) {
        this.blood = blood;
        this.offensive = offensive;
        this.model = model;
        this.colour = colour;
    }

    @Override
    protected BigGoblin clone() {
        try {
            return (BigGoblin) super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }

}

客户端

public class protoTypeClient {

    public static void main(String[] args) {
        BigGoblin goblin = new BigGoblin(100, 50, "丑陋", "green");
        BigGoblin bigGoblin = goblin.clone();
        bigGoblin.setColour("yellow");
        System.out.println(JSON.toJSONString(goblin));
        System.out.println(JSON.toJSONString(bigGoblin));
    }
}
{"blood":100,"colour":"green","model":"丑陋","offensive":50}
{"blood":100,"colour":"yellow","model":"丑陋","offensive":50}

3、总结

原型模式的优点包括:

  • 减少对象的创建成本,避免了重复的初始化操作。
  • 可以更灵活地创建对象,通过克隆现有对象来创建新对象,而无需依赖具体的类和构造函数。
  • 提高了性能,特别是在创建对象成本较高的情况下。
    需要注意以下几点:
  • 克隆方法需要注意深拷贝(深拷贝需要在clone方法中新创建对象)和浅拷贝的问题,确保克隆对象的属性不会相互影响。
  • 原型模式适用于对象的创建过程相对复杂、耗时的情况下,如果对象的创建过程比较简单,直接使用new关键字创建即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值