设计模式之原型模式

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路设计模式之原型模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就原型模式简要概述。

什么是原型模式
原型模式就是实际运用中以一个对象作为原型,我们需要使用时直接获取它的克隆,以提升系统性能。原型模式也是属于创建型模式,是创建对象的最佳实现。

使用场景
需要重复创建对象的情况,需要优化系统资源性能的情况;原型模式一般和工厂模式结合使用。

小试牛刀
假如当前业务需要大量使用同一个对象,但是使用过程又不能修改原始对象,这个使用我们可以使用原型模式。
比如:业务需要对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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!