您的位置:首页 > 其它

ZZ: 使用 "接口" 了解设计模式--策略模式(多态)集合框架 泛型、文件、文件流 IO(流)

2011-06-07 20:05 621 查看
原文链接

目标
使用 "接口" 了解设计模式--策略模式(多态)
集合框架 (*)
泛型 (*)
文件
文件流 IO(流) (*)
IO 中使用的设计模式--装饰者模式

1、使用 "接口" 了解设计模式--策略模式(多态)
编写一个程序,模拟游戏--鸭子(游泳、呱呱叫、飞)
(外观:红色的脑袋;黄色的脑袋;黑色的脑袋;白色的脑袋)

策略模式:定义算法族,分别封装,让它们之间可以替换。
此模式让算法独立于使用算法的用户。

算法:程序运行中变化的部分。

设计原则:开闭原则。
对功能不变的内容,不允许修改代码;对经常变化的功能,允许通过代码扩展。

多用组合、少用继承

好处:方便功能的扩展

2、集合框架 (*)
java.util.* 提供了 Java 中的集合框架、日期处理类、格式类等工具

集合:单独的一个对象,该对象中能够存储很多其他的对象。
可以把该对象看做弥勒佛的乾坤袋。
有一个集合对象,往里面放入数据(任意类型),放入后,集合
对象如何管理里面的数据??
(1)自动转换类型,任意类型-->Object 类型
(2)排序
(3)查找
(4)取出数据
(5)删除
(6)插入

集合框架:
Collection(列表)
/ \
List(有序的,可重复) Set(无序的,唯一)
/ \ |
ArrayList LinkedList HashSet

----------------------------------
Map(映射)
/ \
HashMap Hashtable

----------------------------------------

Collection.add(obj); //自动分配内存,自动分配 index
Collection.delete(obj) //obj 对应的索引会重新排序,把后续数据前移,继续使用该索引

不管做如何操作,保证 索引连续性

List Set 的内存排序图如上,但是 List 中存储的对象 地址可以一样(可以存放重复对象)。 Set 中不同索引中必须存放不同地址的对象。

注意:
(1) 索引与内存地址不一样;
(2) 索引有集合对象生成和管理;
(3) 一般使用 Iterator 迭代器自动通过索引取值。

得到一个集合对象后,可以封装到 Collections 类中,然后进行排序
ArrayList list = new ArrayList();
list.add(obj1);
list.add(obj2);
list.add(obj3);
list.add(obj4);

Collections.addAll(list);
可以使用 Collections 内部自带的方法进行排序;
也可以自定义类继承 Collections ,自定义排序规则进行排序。

3、泛型 (*)
JDK 5 新特性。
(1)新的 for 循环
(2)自动装箱、拆箱
(3)泛型

泛型好处:
(1)泛型一般定义在集合对象中
(2)确保放入到集合对象中的数据是符合要求的类型。
(3)在代码运行过程中,不要进行类型判断或转换,提高运行的速度。

/////////////////////////////////////////
ArrayList<Integer> list2 =new ArrayList<Integer>() ;
list2.add(12); //自动装箱

int num = list2.get(0); //自动拆箱

仅仅限于 8 个原始数据类型使用。8种从 C 中直接拿来用的类型。
Java 在设计的时候直接把用于科学计算的 8 种类型借用过来,但是
这些类型不是对象。

使用包装类,把 8 个原始类型变成 Object 类型。
JDK 1.4 以及之前,都需要要手动的包装、类型转换。
int num = 10;
Integer num = new Integer(10);

//////////////////////////////
Map 中使用泛型 Map<key , value>

//放入数据时考虑类型
Map<String,Student>
//取出数据完全不考虑类型,提高运行效率

Set<K> map.keySet()
返回此映射中包含的键的 Set 视图。
Collection<V> map.values()
返回此映射中包含的值的 Collection 视图。

4、文件
java.io.File
文件类 File 代表计算机硬盘上面存储的数据,这些数据有各自的
存储路径、有各自的名称、有各自的存储方式(字符、10100011001)、
存储后的属性。

D:\工作安排\所带学员\2010年11月8日-11月30日-河北冀软 3M\Day3-基础回顾\Day3.txt

\ 路径分割符
\所带学员\ 不带后缀的 File 对象叫文件夹
day2.txt 带后缀的 File 对象叫文件

File 类
属性
static String separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串

File f = new File();
String ss = f.separator; \(windows 系统) /(UNIX)

构造方法
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一
个新 File 实例。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

url 路径:一般是绝对路径,需要指定盘符;不指定盘符的话,相对于
xxx.java xxx.class

常用方法
boolean canRead()
测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite()
测试应用程序是否可以修改此抽象路径名表示的文件。
boolean exists()
测试此抽象路径名表示的文件或目录是否存在。

File getAbsoluteFile()
返回此抽象路径名的绝对路径名形式。
String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
String getName()
返回由此抽象路径名表示的文件或目录的名称。
String getParent()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
String getPath()
将此抽象路径名转换为一个路径名字符串。
long getTotalSpace()
返回此抽象路径名指定的分区大小。
boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
boolean isFile()
测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件。
long lastModified()
返回此抽象路径名表示的文件最后一次被修改的时间。
long length()
返回由此抽象路径名表示的文件的长度。
boolean mkdir()
创建此抽象路径名指定的目录。
boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

createNewFile();
创建指定路径和名称的文件

5、文件流 IO(流) (*)
IO 包中重点描述的是各种情况下,读取文件中内容的工具---流
(1)输入/输出流
(2)节点流、处理流
(3)文件流
(4)缓冲流
(5)数据流
(6)转化流
(7)Print 流
(8)Object 流

输入输出:参照物是内存,
数据是从硬盘到内存--->输入
反之叫---->输出

流 的分类
(1)按照数据流的方向分为 输入流/输出流
(2)按照处理数据的单位不同,分为字节流(一次一个字节)、
字符流(一次两个字节,处理汉字)
(3)按照功能分,节点流(从文件中读取)、处理流(带缓冲的流)

API 中代码分类
| 字节流 | 字符流
-----------------------------------------
输入流 | InputStream | Reader
输出流 | OutputStream | Writer

读取方法
input.read() 一次读取一个字节
readLine() 一次读取一行
read(byte[] buffer) 一次读取多个字节,带缓冲的读取

6、IO 中使用的设计模式--装饰者模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐