【设计模式】原型模式,这是我学过最简单的设计模式了。

第一时间阅读最新文章的方式!

前言

原型模式是属于创建型模式的一种,我在前面也是介绍了单例模式、构建器模式、工厂模式,这是创建型模式的最后一种了。在原型模式结束后,我会很快地进入结构性模式的学习。

什么是原型模式(Prototype)
概念

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

———百度百科

简单来说,就是通过某个对象复制一个跟它一模一样的新对象。

最形象的比喻就是,孙悟空拔毛后轻轻一吹就生成很多分身一样。

在这里插入图片描述

优点
  1. 性能高。如果是通过Java的Object自带的clone方法,就可以跳开构造器,直接通过内存二进制流的复制来创建,会有更好的性能。
  2. 简化创建对象的过程。想创建一个一模一样的对象只需要调用clone方法即可,不需要再关心对象内部的数据和类的构造方法。
  3. 节省创建对象的前置条件。有些对象在创建之前,可能还需要查询数据库来获取一些参数,这里想做个备份的话就只需要clone即可。

在这里插入图片描述

缺点

有优点,缺点肯定也是有的。

  1. 必须实现Cloneable接口。
  2. 违背了开放封闭原则。想要调用clone方法,就需要对已有的类进行修改,首先实现Cloneable接口,然后修改clone方法。如果是全新的类倒不会违背。
  3. 实现复杂。当对象中有一个成员属性是引用对象或者有循环引用时,实现起来会异常复杂,Java提供的clone方法是不能够复制引用引用对象的,想要复制一份对象内的引用对象就得自己动手。

在这里插入图片描述

适用场景
  1. 对象初始化需要耗费较多的资源。
  2. 通过new创建对象时需要做非常繁琐的数据准备。
  3. 需要大量备份的情况。

原型模式可以与工厂模式一同使用,Java已经为原型模式提供了底层的方法(clone),使用起来也是非常的方便。

如何实现

这里就简单的展示一下如何实现原型模式,Java Object的clone我想在另外一篇文章再详细讲讲,还会涉及到浅拷贝和深拷贝,我也会一起讲。

在这里插入图片描述

想要实现,原型模式,就需要三样东西:

  1. 抽象原型类或原型接口。原型实现类必须要继承或者实现的,这里的话可以使用Object的clone方法,但必须实现Cloneable接口
  2. 具体原型实现类。必须实现抽象原型类或原型接口,然后实现或重写clone方法
  3. 访问类。访问类去调用原型实现类的clone方法。

上类结构图。

在这里插入图片描述

上代码

具体原型实现类:PrototypeEntity

/**
 * Created on 2021/5/28.
 *
 * @author xuxiaobai
 */
public class PrototypeEntity implements Cloneable {
    private int a;
    private int b;
    
    public PrototypeEntity(int a,int b){
        this.a=a;
        this.b=b;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    /**
     * get、set方法省略
     */
}

访问类:PrototypeTest

/**
 * Created on 2021/5/28.
 *
 * @author xuxiaobai
 */
public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        PrototypeEntity p1=new PrototypeEntity();
        Object clone = p1.clone();
    }
}

在这里插入图片描述

总结

原型模式也是一个比较简单的设计模式了,实际开发中的话,我目前还没有使用过,大家可以参考使用场景后酌情使用,不一定非要使用设计模式,其他模式也是一样。

原型模式违背了开放封闭原则、里氏替换原则。对于已有的类来说,去增加一个clone方法,这必然不符合开放封闭原则;父类已经写好的方法,子类居然去修改,这必然不符合里氏替换原则。

原型模式遵守了单一职责原则、迪米特法则。这个方法只负责clone本对象,使用原型模式的话可以封闭内部的成员属性,只提供一个clone方法。

其他原则的话都是可扩展的,这里没有违不违背一说。

到这里创建型模式就告一段落了,后面会开启结构性模式的学习。

看到这里还不给我点赞?

在这里插入图片描述
——————————————————————————————

你知道的越多,不知道的就越多。

如果本文章内容有问题,请直接评论或者私信我。如果觉得我写得还不错的话,点个赞也是对我的支持哦

未经允许,不得转载!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员徐小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值