原型设计模式

原型模式:Prototype Pattern。

原型模式:

/**
* Specify the kinds of objects to create using a prototype instance ,
* and create new objects by coping this prototype
*/

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

原型模式的三个角色:

  1. 客户端:该角色提出对象的请求。

  2. 抽象原型:该角色是一个抽象角色,通常有一个Java接口或者抽象类实现,给出所有的具体原型类所需要的接口。

  3. 具体原型:该角色是被复制的对象,必须实现抽象原型接口。

Java中内置了克隆机制,Object的clone方法,能够实现对象的克隆,但是需要两个步骤:

1,实现Cloneable接口,

2,重写Object的clone方法,完成对象的克隆操作,通常只需要调用Object的clone方法即可,为了使外部能够调用此类的clone方法,可以将可访问修饰符改成public。

案例

public interface Prototype extends Cloneable {
   Prototype clone();
}

public class ConcretePrototype implements Prototype {
   @Override
   public Prototype clone() {
       try {
           return (Prototype)super.clone();
      } catch (CloneNotSupportedException e) {
           e.printStackTrace();
      }
       return null;
  }
}

public class Client {

   private void operation(Prototype prototype) {
       //获取新对象
       Prototype p = prototype.clone();
  }
}

实战使用

我们通常对一个对象进行拷贝的时候会用到下面几个类,他们都是基于原型模式来实现的,如果你用过下面这些类了就别说你没用过原型模式,再者面试的时候也可以扯扯什么是原型模式。

BeanUtils、JSON.parseObject()、Gava

优缺点

性能良好:原型模式是在内存二进制流中复制,要比直接new一个对象性能要好,特别是在一个循环体内产生大量的对象时,原型模式可以更好地提现其优点。

逃避构造函数:可以说是优点,也可以说是缺点,因为减少了约束,需要在实际用时进行权衡考虑,考虑其是否有安全问题等。

使用场景

1,类初始化消耗资源多,

2,new产生的一个对象需要非常繁琐的过程(准备数据,权限访问等)

3,构造函数比较复杂

4,循环体重生产大佬对象时,代码可读性下降

在实际给吸纳灌木中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone方法创建一个对象,然后由工厂方法提供者给调用者。

用下面这张图来形容拷贝,貌似挺不错的,军人都是一样的帅,不近看就以为他们是一模一样的。

 

另外就是很经典的齐天大圣孙悟空的变身,猴毛一吹就变成很多个孙悟空了,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

田哥coder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值