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系统中,任务管理器是唯 ...
随机推荐
- PHPStudy+PHPStorm下配置隐藏项目入口文件
img { max-width: 100% } 默认情况下项目入口文件是站点根目录下index.php文件,一般程序启动时通过这个文件,定义文件路径,配置重要节点(比如是否开启调试模式),注册路由等, ...
- [国嵌攻略][143][LCD驱动程序分析]
LCD驱动程序分析 LCD驱动程序代码在/drivers/video/s3c2410fb.c文件中,在该驱动的s3c2410fb_init中注册了平台驱动,该驱动的初始化代码在s3c24xxfc_pr ...
- python网络编程基础
一.客户端/服务器架构 网络中到处都应有了C/S架构,我们学习socket就是为了完成C/S架构的开发. 二.scoket与网络协议 如果想要实现网络通信我们需要对tcpip,http等很多网络知识有 ...
- 关于layer的坑
真是自己给自己挖坑,坑死人不偿命啊. 在用layui开发时,遇到这种情况,点击按钮出现一个弹出层,然而我不是用button按钮去实现的,而是用a标签做的,本来a标签也是可以实现的,在这里我无形中给自己 ...
- nth-child()选择器小结
之前也用到过nth-child,只是当时理解的不够透彻.今天回过头去看这个知识点时,发现了一个易错点. 浏览器支持情况: 所有主流浏览器都支持nth-child()选择器,除了IE8及更早的版本. 下 ...
- angular 表达式与指令
angular表达式的一些特点 属性表达式: 属性表达式是对应于当前作用域,Javascript对应的是全局window对象. AngularJS要使用window作用域的话得用$window来指向全 ...
- Asp.net mvc 中View的呈现(一)
[toc] 我们知道针对客户端的请求,最终都会转换为对 Controller 中的一个 Action 方法的调用,指定的 Action 方法会返回一个 ActionResult 类型的实例来响应该请求 ...
- mybatis_SQL映射(4)鉴别器
摘录自:http://blog.csdn.net/y172158950/article/details/17505739 鉴别器:有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的 ...
- beetl模板引擎使用笔记
maven项目pom: <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl< ...
- uwsgi wsgi nginx centos7.2部署flask
请原谅我比较懒,直接粘贴onenote笔记了 方法一测试完成后,建议用方法三:uwsgi,ginx部署