前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原型模式

原型模式

作者头像
田维常
发布2019-07-16 11:30:56
4460
发布2019-07-16 11:30:56
举报

原型设计模式

代码语言:javascript
复制
原型模式:Prototype Pattern。

原型模式:

代码语言:javascript
复制
/**
* 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。

案例

代码语言:javascript
复制
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();
  }
}

实战使用

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

代码语言:javascript
复制
BeanUtils、JSON.parseObject()、Gava

优缺点

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

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

使用场景

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

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

3,构造函数比较复杂

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原型设计模式
    • 案例
      • 实战使用
        • 优缺点
          • 使用场景
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档