Java23种设计模式之原型模式

原型模式

定义原型模式属于对象创建模式。用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。用原型模式创建的实例,具有与原型一样的数据。Prototype 模式主要是通过Java的Object类提供的clone() 方法实现对象复制的。
我觉得西游记的孙大圣得分身就很好得诠释了原型:
原型模式

原型模式的结构

  1. 客户角色:由原型对象本身创建新对象;
  2. 抽象原型角色:规定了原型对象复制必须实现的clone()方法;
  3. 具体原型角色:为抽象原型角色的子类,实现了其clone()方法,是可以被复制的对象;

优缺点

优点

  1. 性能提高。减少内存消耗,节约资源,其所有的实例都是共享的同一个,不会创建多个。
  2. 逃避构造函数的约束。原型对象继承时直接是重写其父类方法,扩展方便。

缺点

  1. 因所有的实例共享同一个对象,有可能会相互影响
  2. 需要为每一个类都配置一个 clone 方法

克隆分为浅克隆和深克隆

  1. 浅克隆:拷贝对象和原始对象的引用类型引用同一个对象。浅克隆只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅克隆。
  2. 深克隆:拷贝对象和原始对象的引用类型引用不同对象。深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝
    (例:JSON.parse()和JSON.stringify(),但是此方法无法复制函数类型)。

原型模式通用实现

抽象原型角色

/**
 * @Description: 抽象原型角色
 * @Author: 亦辰
 * @CreateTime: 2023-05-17
 */
public abstract class Prototype {
   
    public abstract Prototype clone();
}

具体原型角色

/**
 * @Description: 具体原型角色
 * @Author: 亦辰
 * @CreateTime: 2023-05-17
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConcretePrototype2 extends Prototype {
   

    private String name;

    public void showInfo() {
   
        System.out.println(this.name + " 地球村华夏第一学院");
    }

    @Override
    public ConcretePrototype2 clone() {
   

        ConcretePrototype2 prototype = new ConcretePrototype2();
        prototype.setName(this.name);
        return prototype;

    }
}

测试

/**
 * @Description: 测试
 * @Author: 亦辰
 * @CreateTime: 2023-05-17
 */
public class ClientTest {
   
    public 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值