java历史记录_简单的带历史记录的搜索功能实现

这两天闲来无事,就把前短时间项目中的搜索功能抽取出来,重新写一下,搜索功能虽然简单,但是设计到得知识点也挺多的,就当做一个总结吧。

代码地址在最后面,话不多说,上效果图 _

5d03a050bd23

searchdemo.gif

历史记录的存储

首先来说下关于历史记录的存储,历史记录的存储方式其实可以有很多方法,可以用sp,数据库等等,那么就直接开撸吧。说开撸你还真以为就直接开撸了,还是先想想吧,我们做历史记录存储的时候需要提供什么给调用者,其实很简单无非就是可以增删改查吗。为了遵守里氏替换原则,就先写了个抽象类BaseHistoryStorage,里面有几个抽象方法,至于是什么自己看吧。这样不管你是用SP还是数据库甚至其他更牛的技术,只需要集成Base类,实现这些抽象方法就行了,至于你是怎么实现的,我才不管呢。

/**

* 历史信息存储基类

* Created by Zellerpooh on 17/1/18.

*/

public abstract class BaseHistoryStorage {

/**

* 保存历史记录时调用

*

* @param value

*/

public abstract void save(String value);

/**

* 移除单条历史记录

*

* @param key

*/

public abstract void remove(String key);

/**

* 清空历史记录

*/

public abstract void clear();

/**

* 生成key

*

* @return

*/

public abstract String generateKey();

/**

* 返回排序好的历史记录

*

* @return

*/

public abstract ArrayList sortHistory();

}

上面的代码很好理解,SearchHistoryModel是我写的一个JavaBean,里面就放了两个String,一个是历史搜索的内容,一个是历史记录的Key,其实你直接返回一个String泛型的ArrayList的就行,但是我这里为了用SP实现的时候跟快速偷了个懒,好了自己去实现一个历史记录存储功能把。

通过SharedPreference实现数据存储

听到让你自己去实现是不是心凉了一半,当然是逗你的了,既然都来了怎么能不给你点福利呢,下面我就实现一个简单的通过SharedPreference实现的数据存储吧,来抛砖迎玉吧。

private static SpHistoryStorage instance;

private SpHistoryStorage(Context context, int historyMax) {

this.context = context.getApplicationContext();

this.HISTORY_MAX = historyMax;

}

public static synchronized SpHistoryStorage getInstance(Context context, int historyMax) {

if (instance == null) {

synchronized (SpHistoryStorage.class) {

if (instance == null) {

instance = new SpHistoryStorage(context, historyMax);

}

}

}

return instance;

}

作为一个励志成为高逼格的高级程序员的菜鸟,当然不会放过任何装逼的机会,对于这种比较耗资源的数据存储,将他设计为单例模式当然最合适不过了,上面就是一个简单的DCL的单

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现Java中的历史修改记录,可以使用Memento设计模式。该模式允许记录对象的内部状态,并在需要时恢复该状态。在实现历史修改记录时,我们可以将对象的每个状态保存在一个备忘录对象中,并将备忘录对象存储在一个列表中。每当对象的状态发生更改时,我们都会创建一个新的备忘录对象并将其添加到列表中。 下面是Java实现历史修改记录的示例代码: ```java import java.util.ArrayList; import java.util.List; public class Document { private String content; private List<Memento> history = new ArrayList<>(); private int currentState = 0; public Document(String content) { this.content = content; history.add(new Memento(content)); } public void setContent(String content) { this.content = content; history.add(new Memento(content)); currentState = history.size() - 1; } public void undo() { if (currentState > 0) { currentState--; content = history.get(currentState).getContent(); } } public void redo() { if (currentState < history.size() - 1) { currentState++; content = history.get(currentState).getContent(); } } @Override public String toString() { return content; } private class Memento { private String content; public Memento(String content) { this.content = content; } public String getContent() { return content; } } } ``` 在这个例子中,我们创建了一个名为“Document”的类,它表示一个文档对象。该类有一个名为“content”的字符串属性,它保存了文档的内容。类中还有一个名为“history”的列表,它保存了文档的历史修改记录。每当文档的内容更改时,我们都会创建一个新的备忘录对象,并将其添加到历史记录列表中。类还有名为“undo”和“redo”的方法,它们允许用户撤消和恢复文档中的更改。 在这个例子中,我们使用了内部类来实现备忘录对象。备忘录对象只有一个名为“content”的属性,它保存了文档的内容。我们在Memento类中提供了一个名为“getContent”的方法,它允许我们从备忘录对象中恢复文档的旧状态。 使用上述代码,我们可以轻松地实现Java中的历史修改记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值