谈恋爱是两个人的事,结婚是两个家庭的事。最近事也挺多的。我也挺烦的,有时候,我也为自己的将来担忧,我自认为自己的技术过硬,但是千里马只有遇到伯乐才能发挥作用。

技术上让我高兴的事是,有个技术问题终于突破了,花了我1个多月时间惦记这事,终于我又花一天时间,不停的尝试,坚持,最后终于搞定了。主要是用IL语言操作实体取值赋值方法,完全个人独立所完成。使用这种方法,我的开源底层框架效率会提升数倍。也是我开源框架的亮点。目前我的开源应用程序底层框架在码云托管平台上托管着,github上只留有最原始的操作数据库版本。至于这个项目什么时候公开,待以后再决定。目前还属于建设完善阶段。

重要是事多说几遍,对象是具有空间的,空间是可以放东西的,如果这个东西是另一个对象,那么放的是这个对象的引用。这样,两个对象就发生关系了,即可以访问的关系。

迭代器模式就是操作集合的一个对象,既然能操作集合,肯定存了集合的引用。集合的基类接口已经约束了,迭代集合对象。

迭代器即一个对象操作另一个对象。

直接上例子,我来解释

//抽象的描述了关系,将来的Aggregate存了Iterator 对象的引用,可以访问到Iterator 对象。

abstract class Aggregate
{
public abstract Iterator CreateIterator();
}

//具体对象

class ConcreteAggregate : Aggregate
{

//对象空间中的集合
private IList<object> items = new List<object>();
public override Iterator CreateIterator()
{

//同样,生成的对象也存了宿主对象,即在ConcreteIterator这个对象中也可以访问到宿主对象
return new ConcreteIterator(this);
}

public int Count
{
get { return items.Count; }
}

//索引的方式操作对象中的集合

public object this[int index]
{
get { return items[index]; }
set { items.Insert(index, value); }
}
}

//迭代器抽象对象的约束

abstract class Iterator
{
public abstract object First();
public abstract object Next();
public abstract bool IsDone();
public abstract object CurrentItem();
}

//具体的迭代器对象

class ConcreteIterator : Iterator
{

private ConcreteAggregate aggregate;
private int current = 0;

//存了宿主对象的引用,可以访问到宿主对象

public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}

//都是访问宿主对象

public override object First()
{
return aggregate[0];
}

public override object Next()
{
object ret = null;
current++;

if (current < aggregate.Count)
{
ret = aggregate[current];
}

return ret;
}

public override object CurrentItem()
{
return aggregate[current];
}

public override bool IsDone()
{
return current >= aggregate.Count ? true : false;
}

}

//集合对象,还可以这样写

//Aggregate a = new ConcreteAggregate();

ConcreteAggregate a = new ConcreteAggregate();

a[0] = "大鸟";
a[1] = "小菜";
a[2] = "行李";
a[3] = "老外";
a[4] = "公交内部员工";
a[5] = "小偷";

//这个地方也可以这样写

//Iterator i = a.CreateIterator();

Iterator i = new ConcreteIterator(a);

object item = i.First();
while (!i.IsDone())
{
Console.WriteLine("{0} 请买车票!", i.CurrentItem());
i.Next();
}

总结:不要看设计模式,要看思想,这个迭代器模式的思想就是宿主可以访问其中对象,其中对象也可以访问宿主。

最近比较忙,这篇写了好几天,程序员最重要的就是工作态度,工作习惯,工作经验,编程思想。

玩面向对象都是在玩引用的,因为通过引用可以让所关联的对象互相访问。

不说了,大家努力吧,我后天订婚。

转载于:https://www.cnblogs.com/wang-charle/p/9236127.html

设计模式漫谈之迭代器模式相关推荐

  1. 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

    设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用 ...

  2. 设计模式笔记(18)---迭代器模式(行为型)

    Gof定义 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露该对象的内部表示. 动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可 ...

  3. JS设计模式初识(四)-迭代器模式

    定义 迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示.迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即迭代器模式使不关心对象的内部构 ...

  4. 《Android源码设计模式》之迭代器模式

    迭代器模式介绍 迭代器模式(Iterator Pattern)又称为游标(Cursor) 模式,是行为型设计模式之一.我们对容器对象的访问必然会涉及遍历算法,如果我没将遍历方法封装到容器中,那么对于容 ...

  5. Java设计模式系列之——迭代器模式

    本篇我们采取倒叙的手法来讲解迭代器模式,先看下面一段我们在平时工作中常见的代码: package com.mazhichu.designpatterns.iterator;import java.ut ...

  6. Java设计模式 (1) —— Iterator迭代器模式

    拿到这个话题,首先搞清楚:什么是迭代器? 大家都学过 for-i 循环,for-i循环的本质就是 通过i++ 或者 i-- ,以实现 从数据的一端 一个一个地遍历数据元素,直到另一端的最后一个元素,将 ...

  7. 二、18【设计模式】之迭代器模式

    今天的博客主题 设计模式 --> 设计模式之迭代器模式 命令模式   CP  (Command Pattern) 定义 将一个请求封装成一个对象,使不同的请求把客户端参数化. 命令模式是对命令的 ...

  8. 设计模式:(迭代器模式)

    1.定义 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行为 ...

  9. 设计模式学习总结-迭代器模式(Iterator Pattern)

    问题: 在面向对象的软件设计中,经常会遇到一些聚集对象,按一定的顺序的遍历访问问题,这个遍历算法究竟应该由谁来实现呢,聚集对象本身?这样聚集对象承受了过多的功能,不仅要维护聚集对象内的元素,还要提供遍 ...

最新文章

  1. Android中自定义checkbox样式
  2. BeanUtils工具的使用
  3. Bitmasking for introspection of Objective-C object pointers i
  4. StateListDrawable和ShapeDrawable结合使用
  5. 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间
  6. SharePoint 2013 入门教程--系列文章
  7. jfinal-layui中如果sql是多表时条件查询写法
  8. HTML 5 span 标签
  9. 全球第一开源ERP Odoo操作手册 数据库简介
  10. 如何做好信息化和数字化建设,看这一篇就够了--童亚斋
  11. 前端常见开发英语单词大全
  12. innerhtml与outerhtml的区别
  13. android 左移动画_android 动画Animation之TranslateAnimation移动
  14. 电子设计教程35:LC振荡电路
  15. WIFI营销读书笔记之二:跑马圈地
  16. linux中useradd命令的使用详解
  17. Fedora最新下载地址
  18. Prometheus监控神技--自动发现配置
  19. 2022年计算机软件水平考试信息系统项目管理(高级)练习题及答案
  20. 行业分析-全球与中国特里坦水瓶市场现状及未来发展趋势

热门文章

  1. boost::hana::remove_range用法的测试程序
  2. boost::fibers::algo::shared_work >用法的测试程序
  3. boost::gregorian模块实现以天为单位显示到新年的时间量的测试程序
  4. Boost:bind绑定查找问题的测试程序
  5. VTK:Qt之SideBySideRenderWindowsQt
  6. OpenGL 着色器的N体仿真
  7. C++实现深度优先搜索DFS(附完整源码)
  8. QT实现3D多个视口渲染场景。
  9. C++STL的string容器
  10. C++这三点对你很重要