MyBatis框架迭代器模式實(shí)現(xiàn)原理解析
迭代器模式,一直沒(méi)用過(guò),也不會(huì)用。恰巧MyBatis框架中也使用到了迭代器模式,而且看起來(lái)還比較簡(jiǎn)單,在以后的工作中,若有需要咱們可模仿它的套路來(lái)干。
直接上代碼
import java.util.Iterator;
/**
* @author Clinton Begin
*/
public class PropertyTokenizer implements Iterator<PropertyTokenizer> {
private String name;
private final String indexedName;
private String index;
private final String children; // 通過(guò)這個(gè)children屬性建立前后兩次迭代的關(guān)系
public PropertyTokenizer(String fullname) {
int delim = fullname.indexOf('.');
if (delim > -1) {
name = fullname.substring(0, delim);
children = fullname.substring(delim + 1);
} else {
name = fullname;
children = null;
}
indexedName = name;
delim = name.indexOf('[');
if (delim > -1) {
index = name.substring(delim + 1, name.length() - 1);
name = name.substring(0, delim);
}
}
public String getName() {
return name;
}
public String getIndex() {
return index;
}
public String getIndexedName() {
return indexedName;
}
public String getChildren() {
return children;
}
@Override
public boolean hasNext() {
return children != null;
}
@Override
public PropertyTokenizer next() {
return new PropertyTokenizer(children);
}
@Override
public void remove() {
throw new UnsupportedOperationException("Remove is not supported, as it has no meaning in the context of properties.");
}
}
實(shí)現(xiàn) Iterator 接口就很方便的弄出一個(gè)迭代器,然后就可以使用hasNext和next方法了。
業(yè)務(wù)邏輯咱們不用管,只需要知道在調(diào)用next方法時(shí),new了一個(gè) PropertyTokenizer 實(shí)例, 而這個(gè)實(shí)例有個(gè) children屬性, hasNext方法就是通過(guò)判斷這個(gè)children屬性是否為空來(lái)作為結(jié)束迭代的判斷條件。
具體的實(shí)現(xiàn)的我們不管,只需要領(lǐng)悟兩點(diǎn): 1. next需要干啥; 2. hasNext的如何判斷?
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
idea創(chuàng)建包含多個(gè)springboot module的maven project的方法
這篇文章主要介紹了idea創(chuàng)建包含多個(gè)springboot module的maven project的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot中使用Redisson的實(shí)現(xiàn)示例
Redission是一個(gè)強(qiáng)大的Java庫(kù),用于構(gòu)建和管理分布式系統(tǒng)中的緩存和任務(wù)調(diào)度,本文主要介紹了SpringBoot中使用Redisson的實(shí)現(xiàn)示例,感興趣的可以了解一下2023-12-12
SpringBoot集成Mybatis+xml格式的sql配置文件操作
這篇文章主要介紹了SpringBoot集成Mybatis+xml格式的sql配置文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
java實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出
這篇文章主要介紹了java實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出的方法和具體示例代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2016-04-04

