所謂Iterator模式 即是Iterator為不同的容器提供一個統(tǒng)一的訪問方式 本文以java中的容器為例 模擬Iterator的原理 需要的朋友可以參考下 ?
站在用戶的角度思考問題,與客戶深入溝通,找到海滄網(wǎng)站設計與海滄網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋海滄地區(qū)。
首先定義一個容器Collection接口
復制代碼 代碼如下: package njupt zhb learn iterator; public interface Collection { ?void add(Object o); ?int size(); ?Iterator iterator(); }
定義一個Iterator迭代器的接口
復制代碼 代碼如下: package njupt zhb learn iterator; public interface Iterator { ?Object next(); ?boolean hasNext(); }
定義一個ArrayList 實現(xiàn)Collection接口 并寫一個實現(xiàn)了Iterator接口的內(nèi)部類
復制代碼 代碼如下: package njupt zhb learn iterator; import njupt zhb learn iterator Collection; public class ArrayList implements Collection { ?Object[] objects = new Object[ ]; ?int index = ; ?public void add(Object o) { ??if(index == objects length) { ???Object[] newObjects = new Object[objects length * ]; ???System arraycopy(objects newObjects objects length); ???objects = newObjects; ??} ??objects[index] = o; ??index ++; ?} ?public int size() { ??return index; ?} ?public Iterator iterator() { ??return new ArrayListIterator(); ?} ?private class ArrayListIterator implements Iterator { ??private int currentIndex = ; ??@Override ??public boolean hasNext() { ???if(currentIndex = index) return false; ???else return true; ??} ??@Override ??public Object next() { ???Object o = objects[currentIndex]; ???currentIndex ++; ???return o; ??} ?} }
編寫測試程序TestMain
復制代碼 代碼如下: package njupt zhb learn iterator; import njupt zhb learn iterator ArrayList; public class TestMain { ?public static void main(String[] args) { ??Collection c = new ArrayList(); ??for(int i= ; i ; i++) { ???c add("string "+i); ??} ??System out println(c size()); ??Iterator it = c iterator(); ??while(it hasNext()) { ???Object o = it next(); ???System out println(o toString() + " "); ??} ?} }
運行結(jié)果
復制代碼 代碼如下: string string string string string string string string string string string string string string string lishixinzhi/Article/program/Java/JSP/201311/20579
設計模式 解決某一類問題最行之有效的方法 (java中有 種通用設計模式)單例設計模式 解決一個類在內(nèi)存中只存在一個對象 單例設計模式有兩種方式 )餓漢式先初始化對象 當類一進內(nèi)存就創(chuàng)建好對象 )懶漢式對象是方法被調(diào)用時才初始化 也叫延時加載 類進內(nèi)存時 對象還沒有存在 只有通過方法調(diào)用時 才建立對象 單例設計模式 是想要保證對象的唯一 )為了避免其他程序過多建立該類對象 先禁止其他程序建立該類對象 )還為了讓其他程序可以訪問到該類對象 只好在本類中自定義一個對象 )為了方便其他程序?qū)ψ远x對象的訪問 可以對外其他一些訪問方式 利用這三步進行代碼實現(xiàn) )將構(gòu)造函數(shù)私有化 )在類中創(chuàng)建一個本類對象 )提供一個方法可以獲取到該對象提示 在單例設計模式中 事物該怎么描述還怎么描述 當需要將該事物的對象保證在內(nèi)存中唯一時 加上以上三步即可 代碼說明 // )餓漢式[java]class Single{private int num;public void setNum(int num){this num = num;}public int getNum(){return num;}//將構(gòu)造函數(shù)私有化private Single(){}//在類中創(chuàng)建一個本類對象 因為構(gòu)造函數(shù)被私有化 該類不能創(chuàng)建對象 想在外部訪問 所以將其靜態(tài)private static Single s = new Single() //提供一個方法可以獲取到該對象 不能創(chuàng)建對象 所以將方法靜態(tài) 可以通過 (類名 方法名)的形式進行訪問public static Single getInstance(){return s;}}class SingleDemo{public static void main(String[] args){//單例的構(gòu)造函數(shù)被靜態(tài)后不能創(chuàng)建對象 保證對象的唯一 所以通過 (類名 方法名)的形式進行訪問Single s = Single getInstance() Single s = Single getInstance() s setNum( ) System out println(s getNum()) //結(jié)果 因為Single單例里面對對象和方法進行了靜態(tài) 數(shù)據(jù)共享 所以s 的值}}
lishixinzhi/Article/program/Java/hx/201311/26060
一、大約分為三類:
1、創(chuàng)建型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。
2、結(jié)構(gòu)型模式(7種):適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。
3、行為型模式(11種):策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。
二、設計模式遵循的原則有6個:
1、開閉原則(OpenClosePrinciple)
對擴展開放,對修改關閉。
2、里氏代換原則(LiskovSubstitutionPrinciple)
只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。
3、依賴倒轉(zhuǎn)原則(DependenceInversionPrinciple)
這個是開閉原則的基礎,對接口編程,依賴于抽象而不依賴于具體。
4、接口隔離原則(InterfaceSegregationPrinciple)
使用多個隔離的借口來降低耦合度。
5、迪米特法則(最少知道原則)(DemeterPrinciple)
一個實體應當盡量少的與其他實體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨立。
6、合成復用原則(CompositeReusePrinciple)
原則是盡量使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。
名稱欄目:java設計模式的代碼 java設計模式代碼實戰(zhàn)
本文地址:http://muchs.cn/article12/hgijdc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站內(nèi)鏈、動態(tài)網(wǎng)站、標簽優(yōu)化、、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)