中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

迭代器模式和模板模式

發布時間:2020-07-18 00:00:10 來源:網絡 閱讀:478 作者:匯天下豪杰 欄目:編程語言

1、迭代器模式

  里面有一個對集合的引用;
  這個迭代器是對誰創建的,這個迭代器就持有誰(這個集合)的引用!

2、具體實現

  (1)、代碼如下

#include<iostream>
using namespace std;

#define SIZE    5

class MyIterator{ //抽象的迭代器
    public:
        virtual void First() = 0;
        virtual void Next() = 0;
        virtual bool isDone() = 0;
        virtual int CurrentItem() = 0;
    private:
};
 
class Abstract{  //抽象的集合類
    public:  
        virtual MyIterator *createIterator() = 0;
        virtual int getItem(int index) = 0;
        virtual int getSize() = 0;
    protected:
};

class ConIterator : public MyIterator{ // 具體的迭代器
    public:
        ConIterator(Abstract *ag){
            p = ag;
            currentIndex = 0;
        }
        virtual void First(){
            currentIndex = 0;   //讓當前游標回到位置0;
        }
        virtual void Next(){
            if(currentIndex < p->getSize())
            currentIndex++;
        }
        virtual bool isDone(){

            return currentIndex == p->getSize();
        }
        virtual int CurrentItem(){
            return p->getItem(currentIndex);
        }
    private:
        int currentIndex;
        Abstract *p;
};

class Jh : public Abstract{
    public:
        Jh(){    
            for(int i = 0; i < SIZE; i++){
                arr[i] = i+100;
            }
        }
        virtual MyIterator *createIterator(){
            return new ConIterator(this);   //讓迭代器持有一個集合的引用!!!
        }
        virtual int getItem(int index){
            return arr[index];
        }
        virtual int getSize(){
            return SIZE;
        }
    private:
        int arr[SIZE];
};


int main(void){
    Abstract *ag = new Jh;
    MyIterator *it = ag->createIterator();

    for(; !(it->isDone()); it->Next()){
        cout<<it->CurrentItem()<<" ";
    }
    cout<<endl;     
    delete ag;
    delete it;

    return 0;
}

  (2)、運行結果

迭代器模式和模板模式


3、模板模式

  提前將業務邏輯做好了,就是同一種模板;


4、具體實現

  (1)、代碼實現

#include<iostream>
using namespace std;

class MakeCar{
    public:
        virtual void MakeHead() = 0;
        virtual void MakeBody() = 0;
        virtual void MakeTail() = 0;
    public:
        void Make(){  //模版函數:提前將業務邏輯做好了;
            MakeTail();
            MakeBody();
            MakeHead();
        }
    private:
};

class Jeep : public MakeCar{
    public:
        virtual void MakeHead(){
            cout<<"Jeep head"<<endl;
        }   
        virtual void MakeBody(){
            cout<<"Jeep Body"<<endl;
        }   
        virtual void MakeTail(){
            cout<<"Jeep Tail"<<endl;
        }
    private:
};


class Bus : public MakeCar{
    public:
        virtual void MakeHead(){
            cout<<"Bus head"<<endl;
        }
        virtual void MakeBody(){
            cout<<"Bus Body"<<endl;
        }
        virtual void MakeTail(){
            cout<<"Bus Tail"<<endl;
        }
    private:
};
int main(void){
    MakeCar *car = new Bus;
    car->Make();
    delete car;

    MakeCar *car1 = new Jeep;
    car1->Make();
    delete car1;    

    return 0;
}

  (2)、運行結果

迭代器模式和模板模式


5、其余設計模式

  (1)、責任鏈模式:執行完一個任務以后,自動的執行下一個任務;

  (2)、觀察者模式:定義對象間多種的依賴關系,使的每一個對象改變狀態,則所有依賴的對象都會得到通知;一對多的關系!!!

  (3)、訪問者模式:將對象的數據和行為進行分離!!!
  主要作用于數據結構:將數據結構與數據結構上的具體操作進行分離!!!
  不同對象對同一個事務的不同操作!

  (4)解釋模式:根據用戶的輸入:程序自動解釋為不同的動作!!!

 




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临泽县| 哈巴河县| 正蓝旗| 曲阳县| 鹤壁市| 正宁县| 六盘水市| 泽库县| 潮安县| 信宜市| 南陵县| 乌拉特后旗| 宁乡县| 乐安县| 精河县| 北碚区| 顺平县| 札达县| 项城市| 华宁县| 温泉县| 房山区| 屏南县| 绥阳县| 剑河县| 碌曲县| 思南县| 同仁县| 梁平县| 荣昌县| 太康县| 闸北区| 新巴尔虎左旗| 遂平县| 吉安市| 宁陵县| 六安市| 奉化市| 司法| 广水市| 科技|