原型模式(Prototype)

原型模式

一.一般实现

1.1 创建对象

    public class Entity {
        public Entity(){
            System.out.println("create entity ...");
        }
    }

1.2 调用

    public static void main(String[] args) {
        new Entity();
    }

1.3 输出

    create entity ...

1.4 缺点

  1. 如需大量创建某对象,对象创建效率,性能低.
  2. 创建对象收访问权限的限制.

二.原型模式

2.1 定义

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

2.2 条件

  1. 实现Cloneable接口.
  2. 重写Object的clone方法.

2.3 浅拷贝与深拷贝

  1. 浅拷贝:只拷贝对象中的基本数据类型和String类型.
  2. 深拷贝:可拷贝对象中的对象类型,集合类型(集合类基本都有自己的clone方法).

三.代码实现

3.1 创建接口

    public interface IEntity extends Cloneable{
        Object clone();
    }

3.2 创建对象

    public class Entity implements IEntity{
        public Entity(){
            System.out.println("create entity ...");
        }
        @Override
        public Object clone() {
            Entity entity = null;
            try {
                entity = (Entity) super.clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            return entity;
        }
    }

3.3 调用

    public static void main(String[] args) {
        IEntity entity1 = new Entity();
        IEntity entity2 = (IEntity) entity1.clone();
        System.out.println(entity1.hashCode());
        System.out.println(entity2.hashCode());
    }

3.4 输出

    create entity ...
    1956725890
    356573597

四.源码

https://github.com/Seasons20/DisignPattern.git

END

    原文作者:Knowing
    原文地址: https://segmentfault.com/a/1190000014911294
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞