什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就原型模式简要概述。
什么是原型模式
原型模式就是实际运用中以一个对象作为原型,我们需要使用时直接获取它的克隆,以提升系统性能。原型模式也是属于创建型模式,是创建对象的最佳实现。
使用场景
需要重复创建对象的情况,需要优化系统资源性能的情况;原型模式一般和工厂模式结合使用。
小试牛刀
假如当前业务需要大量使用同一个对象,但是使用过程又不能修改原始对象,这个使用我们可以使用原型模式。
比如:业务需要对Student对象频繁创建并使用
1、定义一个实体CloneEntity父类并实现Cloneable
/**
* clone
* @author senfel
* @version 1.0
* @date 2022/8/12 14:03
*/
public class CloneEntity implements Cloneable{
public Object clone(){
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
}
2、创建Student实体并继承CloneEntity
/**
* 学生对象
* @author senfel
* @version 1.0
* @date 2022/8/12 13:44
*/
public class Student extends CloneEntity{
public Student(Integer id, String name) {
this.id = id;
this.name = name;
}
/**
* ID
*/
private Integer id;
/**
* 姓名
*/
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3、提供一个缓存对象的实体,并提供缓存、提取对象的方法
/**
* 对象缓存
* @author senfel
* @version 1.0
* @date 2022/8/12 13:52
*/
public class ObjectCache<T extends CloneEntity> {
/**
* 临时缓存
*/
private Map<String,T> map = new HashMap<>();
/**
* 缓存对象
* @param obj
*/
public void addCache(T obj){
map.put(obj.getClass().getName(),obj);
}
/**
* 获取对象
* @param className
* @return
*/
public T getObj(String className){
T t = map.get(className);
System.err.println("原始对象:"+t);
Object clone = t.clone();
System.err.println("当前对象:"+clone);
return (T)clone;
}
}
4、愉快的创建多个对象
/**
* 原型模式测试
* @author senfel
* @version 1.0
* @date 2022/8/12 13:58
*/
@SpringBootTest
public class TestPrototypeMedel {
@Test
public void test(){
ObjectCache<Student> studentObjectCache = new ObjectCache<>();
studentObjectCache.addCache(new Student(1,"senfel"));
//获取对象
Student obj = studentObjectCache.getObj("pub.iit.testdemo.prototype.Student");
Student obj2 = studentObjectCache.getObj("pub.iit.testdemo.prototype.Student");
Student obj3 = studentObjectCache.getObj("pub.iit.testdemo.prototype.Student");
Student obj4 = studentObjectCache.getObj("pub.iit.testdemo.prototype.Student");
Student obj5 = studentObjectCache.getObj("pub.iit.testdemo.prototype.Student");
}
}
测试结果:
原始对象:pub.iit.testdemo.prototype.Student@7b3c2ae0
当前对象:pub.iit.testdemo.prototype.Student@5d3b6585
原始对象:pub.iit.testdemo.prototype.Student@7b3c2ae0
当前对象:pub.iit.testdemo.prototype.Student@41059616
原始对象:pub.iit.testdemo.prototype.Student@7b3c2ae0
当前对象:pub.iit.testdemo.prototype.Student@2e93108a
原始对象:pub.iit.testdemo.prototype.Student@7b3c2ae0
当前对象:pub.iit.testdemo.prototype.Student@34e25492
原始对象:pub.iit.testdemo.prototype.Student@7b3c2ae0
当前对象:pub.iit.testdemo.prototype.Student@32f308c6
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154696.html