迭代器模式和模板模式

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)解释模式:根据用户的输入:程序自动解释为不同的动作!!!

时间: 2024-11-05 19:26:11

迭代器模式和模板模式的相关文章

16行为型模式之模板模式

概念 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为. 应用场景 Template Method模式一般应用在具有以下条件的应用中: - 具有统一的操作步骤或操作过程 - 具有不同的操作细节 - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同 总结: 在抽象类中统一操作步骤,并规定好接口:让子类实现接口.这样可以把各个具体的子类和操作步骤接耦合. 角色

行为型模式之模板模式

定义 模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 实现 模板类 public abstract class DrawPerson { public abstract void DrawHead(); public abstract void DrawBody(); public abstract void DrawHand(); public abstract void DrawFoot(); /

java模式之模板模式——抽象类

模板设计模式(Template ) abstract class Action{ // 定义一个行为类 public static final String WORK = "work"; public static final String SLEEP = "sleep"; public static final String EAT = "eat"; public abstract void eat(); public abstract voi

Java设计模式之模板模式(Template )

前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板模式. 模板模式(Template ): 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 模式中的角色 抽象

设计模式(十一): 模板模式

模板模式 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型模式. 介绍 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 主要解决:一些方法通用,却在每一个子类都重新写了这一方法. 何时使用:有一些通用的方法. 如何解决:将这些通用算法抽象出来. 关键代码:在抽象类实现,其

设计模式——行为型模式之模板方法模式(一)

模板模式 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型模式. 介绍 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 主要解决:一些方法通用,却在每一个子类都重新写了这一方法. 何时使用:有一些通用的方法. 如何解决:将这些通用算法抽象出来. 关键代码:在抽象类实现,其

(38)23种设计模式研究之九【迭代器模式和组合模式】

一.定义 迭代器可以认为是一个指针,可以遍历容器的指针.迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器物件的内容迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址.迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器.然而迭代器有很多不同的能力,它可以把抽象容器和

12. 星际争霸之php设计模式--模板模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248192.html============================================

模板模式

模板模式:解决某类事情的步骤有些是固定的,有些是会发生变化的,那么这时候我们可以为这类事情提供一个模板代码,从而提高效率. 模板模式的步骤: 1.先写出解决该类事件中的一件的解决方案. 2.分析代码,把会发生变化的代码抽取出来独立成一个方法.把该方法描述成一个抽象的方法. 3.是用final关键字修饰模板方法,防止别人重写你的模板方法. 例子:需求:编写一个计算程序运行时间的模板. 代码示例: 1 abstract class ProgramRuntime 2 { 3 public final