溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

迭代器模式和模板模式

發(fā)布時(shí)間:2020-07-18 00:00:10 來(lái)源:網(wǎng)絡(luò) 閱讀:471 作者:匯天下豪杰 欄目:編程語(yǔ)言

1、迭代器模式

  里面有一個(gè)對(duì)集合的引用;
  這個(gè)迭代器是對(duì)誰(shuí)創(chuàng)建的,這個(gè)迭代器就持有誰(shuí)(這個(gè)集合)的引用!

2、具體實(shí)現(xiàn)

  (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;   //讓當(dāng)前游標(biāo)回到位置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);   //讓迭代器持有一個(gè)集合的引用!!!
        }
        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)、運(yùn)行結(jié)果

迭代器模式和模板模式


3、模板模式

  提前將業(yè)務(wù)邏輯做好了,就是同一種模板;


4、具體實(shí)現(xiàn)

  (1)、代碼實(shí)現(xiàn)

#include<iostream>
using namespace std;

class MakeCar{
    public:
        virtual void MakeHead() = 0;
        virtual void MakeBody() = 0;
        virtual void MakeTail() = 0;
    public:
        void Make(){  //模版函數(shù):提前將業(yè)務(wù)邏輯做好了;
            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)、運(yùn)行結(jié)果

迭代器模式和模板模式


5、其余設(shè)計(jì)模式

  (1)、責(zé)任鏈模式:執(zhí)行完一個(gè)任務(wù)以后,自動(dòng)的執(zhí)行下一個(gè)任務(wù);

  (2)、觀察者模式:定義對(duì)象間多種的依賴關(guān)系,使的每一個(gè)對(duì)象改變狀態(tài),則所有依賴的對(duì)象都會(huì)得到通知;一對(duì)多的關(guān)系!!!

  (3)、訪問(wèn)者模式:將對(duì)象的數(shù)據(jù)和行為進(jìn)行分離!!!
  主要作用于數(shù)據(jù)結(jié)構(gòu):將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)上的具體操作進(jìn)行分離!!!
  不同對(duì)象對(duì)同一個(gè)事務(wù)的不同操作!

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

 




向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI