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

首先我们定义一个自己的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. 如何使用cmd打开磁盘目录和文件

    在windows操作系统中拥有命令行工具(cmd).cmd具有强大的功能,这里我就和大家介绍一下怎么使用cmd命令打开文件. 工具/原料 cmd命令行 打开cmd 1 在windows操作系统中按住w ...

  2. 在form里面,放了四个UEditor,怎么在后台分别获取它们值

    1) 默认情况下提交到后台的表单名称是 "editorValue",在editor_config.js中可以配置,参数名为textarea. 2) 可以在容器标签(即script标 ...

  3. Vuthink正确安装过程

    1.      下载项目vuethink,本例将项目放置website文件下. 2.      后台搭建 本地建站–>以phpstudy为例 1)      新建站点域名 <Virtual ...

  4. JFinal极速开发框架使用笔记(四) _JFinalDemoGenerator实体类生成及映射自动化

    运行_JFinalDemoGenerator生成实体类和映射之前的项目结构: 运行之后: 生成和改变的文件: 实体类: package com.wazn.model; import com.wazn. ...

  5. Angular 4 设置组件样式的几种方式

      你用Angular吗? 一.介绍 如何只改动最简单的css代码,呈现完全不一样的视图效果. 第一种:最基本的设置:   图1 代码 图2 界面运行效果图 平常,想给一个label或者p等标签添加样 ...

  6. [知了堂学习笔记]_css3特效第一篇--旋转的背景&翻书效果

    一.html遮盖层与css3的旋转动画 >效果图(加载可能会慢一点儿,请稍等...): >实现思路:在一个大的div中装入一个底层img和顶层的div(里面的内容按照以上图片呈现的样式布局 ...

  7. 使用“消息服务框架”(MSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)

    1,示例解决方案介绍 在上一篇 <消息服务框架(MSF)应用实例之分布式事务三阶段提交协议的实现>中,我们分析了分布式事务的三阶段提交协议的原理,现在我们来看看如何使用消息服务框架(MSF ...

  8. Linux网络设备驱动架构

    Linux网络设备驱动程序体系结构分为四层:网络协议接口层.网络设备接口层.提供实际功能的设备驱动层以及网络设备与媒介层. (1)网络协议接口层向网络层协议提供统一的数据包收发接口,不论上层协议是AR ...

  9. python_如何判断字符串a以某个字符串开头或结尾?

    案例: 某文件系统目录下有一系列文件: 1.c 2.py 3.java 4.sh 5.cpp ...... 编写一个程序,给其中所有的.sh文件和.py文件加上可执行权限 如何解决这个问题? 1. 先 ...

  10. maven插件本地化安装

    mvn install:install-file -Dfile="D:\maven\repository\com\tc\itfarm-api\1.0.0-SNAPSHOT\itfarm-ap ...