设计模式之----原型模式
来源:互联网 发布:300525 博思软件 编辑:程序博客网 时间:2024/06/11 13:41
1. 概念
用原型的实例指定创建的种类并通过拷贝这些原型创建新的对象。
通俗:复制一模一样的对象出来。
目的:保护最原始的那一份存档,隐藏复制的过程。
2. 原理
在需要跟当前对象一模一样的对象时,直接使用该对象的克隆方法,避免手动去new对象,再逐一进行赋值等操作(这样就把复制过程隐藏)。同时,改变新的对象不会对原来的数据造成影响。
3. 代码示例
非重写clone()方法的方式,如果调用改方法,没有被重新,则会抛出异常。
3.1 定义一个对象的父接口
/** * Created by rytong on 2017/10/10. */public interface SuperIntrface {}
3.2 定义一个克隆的接口
/** * Created by rytong on 2017/10/10. */public interface CloneInterface { SuperIntrface cloneObject();}
3.3 编写对象的实现
实现对象父接口、实现克隆接口,并封装克隆方法
/** * Created by rytong on 2017/10/10. */public class MyObject implements SuperIntrface ,CloneInterface{ private String filed1; private int filed2; private ArrayList<String> arrays; public void setFiled1(String filed1) { this.filed1 = filed1; } public void setFiled2(int filed2) { this.filed2 = filed2; } public void setArrays(ArrayList<String> arrays) { this.arrays = arrays; } public String getFiled1() { return filed1; } public int getFiled2() { return filed2; } public ArrayList<String> getArrays() { return arrays; } @Override public SuperIntrface cloneObject() { MyObject myObject = new MyObject(); myObject.setFiled1(this.filed1); myObject.setFiled2(this.filed2); // 除8大基本类型和其封装类型外,只有String是深拷贝,所以list需要这样调用,才能深拷贝过去 myObject.setArrays((ArrayList<String>) this.arrays.clone()); return myObject; }}
3.4 克隆对象的使用
MyObject myObject = new MyObject();myObject.setFiled1("这是字段1");myObject.setFiled2(100);ArrayList<String> strings = new ArrayList<>();strings.add("123");strings.add("345");strings.add("567");myObject.setArrays(strings);// 使用克隆对象MyObject cloneObject = (MyObject) myObject.cloneObject();ArrayList<String> arrays = cloneObject.getArrays();
4. 深拷贝、浅拷贝
先引入一张图,图上的文字很好的说明了深拷贝和浅拷贝的区别。
- 深拷贝与浅拷贝问题中,会发生深拷贝的有java中的8中基本类型以及他们的封装类型,另外还有String类型。其余的都是浅拷贝。
- 直接复写Object的clone方法实现原型模式,可能会漏写导致抛出异常,需要注意。
- 原型模式一般很少单独使用,都是混合其他模式一起使用。
阅读全文
0 0
- 设计模式之原型
- 设计模式之原型
- 设计模式 之 原型
- 设计模式之原型
- 设计模式之原型
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之-原型模式
- 设计模式之 原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之--原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 异常流程
- springmvc+mybatis+sql server实现简单登录功能
- 【安全牛学习笔记】密码嗅探、中间人攻击
- nyoj20 吝啬的国度
- 闭包
- 设计模式之----原型模式
- C语言32个关键词
- 凌云光科技笔试题
- zabbix 监控项
- Java中为什么float型最大值大于long型?
- Apache Ant自动化脚本入门教程及常用命令介绍
- Java编程-树的高度
- 我掌握的测试领域知识(持续更新)
- jQuery-强大的jQuery选择器 (详解)