2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟
因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的
首先我们定义一个自己的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,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟的更多相关文章
- 2018/3/14 Hadoop学习笔记(一)
首先,什么是Hadoop?为什么它是现在大数据处理最热门的框架呢?(正确来说,现在Hadoop是一个生态圈) Hadoop是apache下一套开源的服务框架,它主要的作用就是利用服务器集群,来对海量数 ...
- 设计模式学习笔记(十四)责任链模式实现以及在Filter中的应用
责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求.当有请求发生时,可将请求沿着这条 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- Java设计模式学习笔记(三) 工厂方法模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- 设计模式学习笔记--备忘录(Mamento)模式
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...
- C#设计模式学习笔记-单例模式(转)
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...
- Java设计模式学习笔记(四) 抽象工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
- Java设计模式学习笔记(五) 单例模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...
随机推荐
- window下部署Solr
主要步骤如下: 1.下载solr-4.7.2.zip;下载地址:http://archive.apache.org/dist/lucene/java/ 2.解压缩solr-4.7.2.zip,解压后目 ...
- [国嵌攻略][048][MMU配置与使用]
MMU配置与使用 1.通过点亮LED使用虚拟地址来使用MMU,采用段页映射方式 2.任务步骤:1.建立一级页表 2.写入TTB 3.打开MMU 代码编写 1.虚拟地址的段地址0xA0000000,一级 ...
- SSAS属性中更改AllowedBrowsingFolders的值后才能更改其它文件夹的值
首先 以管理员身份运行 打开SQL Server Management Studio (SSMS). 在Sql Server Analysis Service中的属性中有很多文件夹属性,决定了存放CU ...
- linux 下CentOS 下 npm命令安装gitbook失败的问题
运行环境 linux 服务器:CentOS 7.0 系统:安装了nodejs :使用 npm 安装 gitbook 出现错误提示: npm install -g gitbook-cli symbol ...
- block的修饰词为什么选用copy
想必很多开发人员知道一般用copy修饰block,接下来就讲解为什么需要用copy,甚至会讲到其实用strong修饰block也是可以的 在 Objective-C 语言中,一共有 3 种类型的 bl ...
- Solr学习笔记1(V7.2)
下载压缩包http://archive.apache.org/dist/lucene/,解压后放到某一盘符下面 Windows下启动命令 :\solr-7.2.0>bin\solr.cmd st ...
- 阿里云邮箱POP3、SMTP设置教程
3G免费网www.3gmfw.cn免费为你分享阿里云邮箱POP3.SMTP设置教程,阿里云邮箱 阿里云邮箱POP3设置 阿里云邮箱SMTP设置的相关资源如下: 什么是POP3.SMTP? 阿里云邮箱已 ...
- 可变数目参数----关键字params的使用
如何定义和使用可变数目参数的方法,使用关键字params. 即其他语言的可变参数 Code public class App { static void Main() { //常规使用方法 Conso ...
- CCF系列之ISBN号码(201312-2)
试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规 ...
- 前端HTML介绍
一.HTML简介 HTML定义: 超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身是一种文本文件,通过在文本文件中添加 ...