因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的

首先我们定义一个自己的Collection接口:

创建自己的ArrayList类并实现此接口

再创建自己的LinkedList类并实现MyCollection接口

现在两个类都创建好了,我们开始定义Iterator接口

在MyArrayList里创建一个内部类实现Iterator并封装,同时开放一个接口让别人获取此内部类的对象

MyLinkedList相同

打完收工;其实ArrayList和LinkedList源码的Iterator都是直接对底层的数组和链表做操作,不过我怕麻烦,所以直接把当前对象传了进去;

Iterator在设计模式里叫做迭代器模式,其主要定义为,提供一种可以访问容器种各个的方式,但又不暴露该容器的内部细节。这里内部细节的意思就是因为每个容器本身的数据结构不同,如ArrayList底层是一个数组,LinkedList底层则是链表,访问ArrayList的时候你可以使用for,但是如果需要遍历LinkedList则只能使用while。(我代码中之所以都是调用了get,单纯是因为怕麻烦,源码都是直接对数组和链表做的操作)

而Iterator给我们定义了一个访问容器内元素的一个规范,具体要怎么实现就看你自己,这样一来在别人访问某个容器中元素的时候就不必再先去了解一下此容器的内部细节,直接获得此容器的迭代器对象就行;这也是面向对象编程中让对象帮我们去做事情这种思想的直接体现;

在此次学习中,我学习到了两个点,一个便是统一规范的重要性,二个便是面向对象思想的更深入了解,也懂得了为什么说面向接口基于面向对象但高于面向对象;

下面是我在通过Iterator设计模式的学习上举一反三的发散式思考,抛却智商因素,这也是我感觉自己不管学什么都比别人更深更快,同样一个点我能看到面而很多人只能看到点的原因之一;

首先接口是一个规范,是对一个体某些行为的定义。而与接口的概念最容易混淆的便是抽象类,同样可以定义抽象方法,同样不能有实例,只是抽象类可以实现方法体,并且也拥有构造函数,它与子类的关系也是继承,但他们的区别难道仅仅在于代码级别的体现吗?

这里说下我的理解,所谓抽象类,应该是一个我们能想到的某个事物,只是它太笼统,抽象,不够具体,但我们知道它能大概干什么,具体怎么干。举一个例子,比如交通工具,这就很抽象了,交通工具可以是汽车,可以是飞机,但是它们都有一个共同点,那就是可以运送我们从一个地方到另一个地方。这个时候这种运送就是交通工具的共同行为,我们就可以将其、

抽象为一个接口,这个接口的功能就是运送能力。但是汽车是在地上跑的。飞机是在天上跑的,而且汽车和飞机还是太抽象了,汽车可能是大卡车,也可能是小轿车,而飞机也有可能是客机,也可能是直升飞机,它们的启动方式和本身的构造都不相同,所以汽车和飞机虽然我们知道它们的运送行为是一个在地上跑,一个在天上飞。但是它们的

底下的种类分支太多,所以汽车和飞机都只能定义为抽象类。在这个时候我们可以在抽象类中实现它们一个在地上跑,一个是在天上飞的方法,但具体怎么跑,怎么飞我们则要将其定义为抽象方法,然后让具体的卡车或者汽车或者直升机对象实现它,甚至我们可以在其中定义一些公有属性;这样一来我们就不用去关心每个具体的对象它们怎么跑怎么飞的内部细节,只需要创建具体交通工具对象的人去实现它,我们直接调用即可;下面是代码示例:

2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟的更多相关文章

  1. 2018/3/14 Hadoop学习笔记(一)

    首先,什么是Hadoop?为什么它是现在大数据处理最热门的框架呢?(正确来说,现在Hadoop是一个生态圈) Hadoop是apache下一套开源的服务框架,它主要的作用就是利用服务器集群,来对海量数 ...

  2. 设计模式学习笔记(十四)责任链模式实现以及在Filter中的应用

    责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求.当有请求发生时,可将请求沿着这条 ...

  3. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  4. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  5. C#设计模式学习笔记-单例模式随笔

    最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...

  6. 设计模式学习笔记--备忘录(Mamento)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...

  7. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...

  8. Java设计模式学习笔记(四) 抽象工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...

  9. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

随机推荐

  1. Hadoop2.7.5+Hbase1.4.0完全分布式

    Hadoop2.7.5+Hbase1.4.0完全分布式一.在介绍完全分布式之前先给初学者推荐两本书:<Hbase权威指南>偏理论<Hbase实战>实战多一些 二.在安装完全分布 ...

  2. SSM框架原理,作用及使用方法

    ---恢复内容开始--- 尊重原创:http://m.blog.csdn.net/dennis_wu_/article/details/73437097 作用: SSM框架是spring MVC ,s ...

  3. volatile 与 synchronized 区别

    在Java中,为了保证多线程读写数据时保证数据的一致性,可以采用两种方式: 同步 如用synchronized关键字,或者使用锁对象. volatile 使用volatile关键字用一句话概括vola ...

  4. 利用脚本将EXCEl表倒入PowerDesigner中

    1.Excel表格样式 2.脚本代码 '****************************************************************************** O ...

  5. input[type=file]样式更改以及图片上传预览

    以前知道input[type=file]可以上传文件,但是没用过,今天初次用,总感觉默认样式怪怪的,想修改一下,于是折腾了半天,总算是小有收获. 以上是默认样式,这里我想小小的修改下: HTML代码如 ...

  6. 淘淘商城学习笔记 之 上传图片到远程服务器,图片的回显出现的bug

    最近在学习淘淘商城中用到的技术,感觉受益良多,遇到一个比较奇怪的bug调了好久,遂心乐之分享于诸君 bug情况是这样的:在商城的后台上传图片之后图片回显不出来,右键查看链接,发现链接被加了localh ...

  7. C#应用程序运行到linux【CentOS】

    具体的操作方法在linux.Net中.最近要部署网站在centOS,以及测试下小程序跑到上面.刚好实现了一番 说说C#应用程序如何跑到centOS.非常的简单. 1.准备工具“AnyExec”[工具在 ...

  8. 学习总结:libevent--简单入门

    libevent--简单入门 一.简介 libevent是一个c语言写的事件驱动库,轻量级,专注于网络,跨平台特性好,支持多种 I/O 多路复用.支持I/O,定时器和信号等事件,允许设置注册事件优先级 ...

  9. UML图学习之三 状态图

    状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action). ...

  10. 配置shiro错误

    在web配置工程中配置shiro,如果启动Tomcat,报错:org.apache.shiro.web.config.WebIniSecurityManagerFactory.setDefaults ...