黑马程序员 Java设计模式 和 JavaSE总结

来源:互联网 发布:怎样查看淘宝销售数据 编辑:程序博客网 时间:2024/04/28 12:14

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

 Java设计模式 和 JavaSE总结

设计模式

通过很多东西抽取出来的一个模型。

创建型:创建对象。工厂模式,单例模式。
结构型:对象间的关系。装饰模式。
行为型:对象能够做什么。模板模式。

GOF设计模式。(23种。)
闫闳(国内研究设计模式比较早)
论坛:CSDN,ITeye,J道,www.infoq.com

工厂模式:

比如说,我们现在有很多动物类,猫,狗,猪...
而这些动物有相同的行为,eat()。
抽取一个共同的父类。动物。

简单工厂模式:
Animal
|--Dog
|--Cat

AnimalFactory
public static Animal createAnimal(String type){
if("dog".equals(type)){
return new Dog();
}else if("cat".equals(type)){
return new Cat();
}else {
return null;
}
}

工厂方法模式:
Animal
|--Dog
|--Cat
|--Pig

AnimalFactory
|--DogFactory
|--CatFactory
|--PigFactory



单例模式:

就是指类在内存中只能有一个对象。
举例:windows的打印服务,网站计数器
应用:线程池,数据库连接池

面试题:请写出一个单例设计模式。

分析:
类在内存中只能有一个对象。

A:外界不能够随意创建对象。
把构造方法私有
B:类本身要创建一个对象。
C:通过公共的方式提供给别人。

单例模式分类:
饿汉式:类加载就创建对象(开发用)
懒汉式:什么时候用,就什么时候创建。(面试用)

为什么?
A:延迟加载。
B:线程安全问题。怎么解决呢?

装饰模式:

对类原有的功能进行了修饰或者扩充。
我们都有手机,手机具备打电话的功能。
按照正常做法,我们应该把手机类给设计出来,并给出一个打电话功能。Phone.java
随着发展,人的需求也是在变化的,假设我现在需要在打电话前听到彩铃,而这种需求是部分人需要的,那么,现在我们该怎么办呢?
回想我们曾经学过继承,通过继承就可以具备父亲的打电话功能,我还可以在新的手机上添加彩铃功能。ColorPhone.java
继续发展,人的需求又发生改变了,我想在打完电话后,可以播放广告。GuangGaoPhone.java
需求继续改变,我想要先有彩铃,接着打电话,最后放广告。
A:继承ColorPhone
B:继承Phone,然后自己实现彩铃,父亲的打电话,自己实现广告
需求还是可以继续发生改变的,使用继承可以解决问题,但是,将来一旦某个父亲发生了改变,依赖这个父亲的子类都会发生改变。
所以,这种解决方案可以,但是不好。

Phone
|--ColorPhone
|--ColorGuangGaoPhone
|--...
|--GuangGaoPhone
|--...

既然不好,那么, 在开发的过程中,就会有相应的东西来替代它。
这种东西就叫:设计模式。
而我们讲解的这种模式:装饰设计模式。
A:被装饰的抽象事物 Phone
B:具体的事物 PhoneImpl
实现Phone接口,具体实现类
C:装饰类 PhoneDecorate
实现Phone接口,调用实现。

private Phone phone;


public PhoneDecorate(Phone phone) {
this.phone = phone;
}

@Override
public void call() {
this.phone.call(); // 具体的手机打电话功能
}


要有彩铃:
具有彩铃功能的装饰类
要有广告:
具有广告功能的装饰类
要有先彩铃,接着电话,最后广告功能。
...


Phone(接口)
|--PhoneImpl(具体实现类)
|--PhoneDecorate(抽象类)
|--ColorPhoneDecorate(具体装饰类)
|--GuangGaoPhoneDecorate(具体装饰类)


模板模式:

我需要打印一篇文章,这篇文章:
头,中间,尾组成。

Print
print(){
printHead();
printBody();
printBottom();
}
printHead(){}
printBody(){}
printBottom(){}

这样做的话,我们就得把打印操作给固定了,固定后如果有新的变化,发现不好。
怎么办呢?我们就采用一种设计模式解决:模板模式。

模板类:(抽象类)

打印模板类:
打印方法:具体的。

三个抽象方法。

具体实现类1:
具体实现类2:

作业:我们学过如何计算一段程序的时间,请自己通过模板方法模式模拟出一个计算程序运行时间的模板类。
    还得有具体的实现类。


JavaSE 总结

JavaSE基础知识:

1:常用的DOS命令和快捷键。
2:JDK的下载,安装和卸载。
安装:所有跟开发相关的软件安装不要有中文和其他的字符(包括空格)。
卸载:不要直接删除文件夹。
3:Java程序的开发流程:
A:编写源码
B:用Javac命令编译生成字节码文件
C:用Java名字执行
4:HelloWorld案例完成和常见问题。
5:掌握Path环境变量的配置和了解classpath环境变量的配置。
6:关键字(是java有特殊意义的单词)
7:标识符(命名规则)
8:注释(解释说明程序的)
9:常量(字面值常量和自定义常量 final)
10:进制及进制转换
11:原码,反码,补码
12:变量
数据类型 变量名 = 初始化值;
13:数据类型
4类8种。
14:数据类型转换
A:隐式转换 小到大
B:强制转换 大到小
15:运算符
A:算术
B:赋值
C:关系
D:逻辑
E:位运算符
F:三元运算符
16:运算符以及ASCII码表
17:顺序结构
从上往下执行
18:判断结构
if语句
switch语句
19:循环结构
while
do...while
for
20:break和continue
21:函数(完成特定功能的代码块)
A:函数只有被调用才执行。
B:函数的调用
a:void类型
b:非void类型
C:函数重载
22:数组:(存储同一种类型的多个元素的容器)
A:数组中的元素从0开始编号,通过编号我们可以很容易的获取元素。
B:定义方式
数据类型[] 变量 = new 数据类型[值];
C:数组的操作
数组有一个length属性,可以获取元素的个数。


a:遍历
b:获取最值
c:排序
d:查找


面向对象:

1:面向对象
面向过程
2:现实世界的事物通过Java语言来描述
事物 --
特征 --成员变量
行为 --成员方法
3:类与对象的关系
4:创建对象,调用成员。
对象通过.调用。
5:局部变量和成员变量的区别
6:构造方法
7:私有关键字(private)
8:this关键字
9:static关键字
A:通过类名也可以调用
B:是被所有对象共享的数据
10:继承
extends
11:多态
类多态
抽象类多态
接口多态


好处:提高程序的扩展性和可维护性
弊端:不能使用子类特有功能


向上转型:小到大
向下转换:大到小


多态中,成员变量和成员方法的使用。
举例;孔子装爹
12:抽象类
abstract
13:接口
interface
implements
14:抽象类和接口的区别
A:成员区别
抽象类:
成员变量,成员常量
成员普通方法,成员抽象方法
构造方法
接口:
成员常量
成员抽象方法
B:关系区别
类与类
类与接口
接口与接口
C:设计理念不同
抽象类(共性内容): is a
接口(扩展功能):like a
15:内部类
匿名内部类:
new 父类或者接口名()
{
重写方法();
//也可以自己定义方法
}
16:包(package)
17:导包(import)
18:权限修饰符

Eclipse的使用:

1:Eclipse的下载,安装,卸载。
2:创建项目,创建包,创建类,完成功能。
3:快捷键
alt+/
导包
格式化
4:看源码(一定要先会用)
5:断点调试(不适合调试多线程程序)


常用API的使用:

Object
1:使用API的步骤。
2:String
3:StringBuffer/StringBuilder
4:Integer
5:Scanner
6:Math
7:Random
8:System
9:Arrays
10:Runtime
11:Date/DateFormat/Calendar
12:BigInteger/BigDecimal


集合体系结构:

1:集合的由来
2:集合和数组的区别
3:Collection集合的体系结构和功能
4:List集合的功能
5:数据结构概述(栈,队列,数组,链表)
6:ArrayList
7:Vector
8:LinkedList
9:泛型
10:增强for
11:Set集合的功能
12:HashSet集合的使用(哈希表数据结构hashCode()和equals())
13:TreeSet集合的使用(二叉树数据结构Comparable和Comparator)
14:Map集合的功能
15:Map集合的遍历(键找值,键值对对象找键和值)
16:HashMap集合的使用
17:TreeMap集合的使用


18:集合体系结构总结:
集合:
|--Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
|--Comparable
|--Comparator
|--Map
|--HashMap
|--Hashtable
|--Properties
|--TreeMap


19:在集合中常见的数据结构总结:
ArrayXxx:表示数组结构
LinkXxx:表示链表结构
HashXxx:表示哈希表结构
TreeXxx:表示树结构


20:集合最常见的操作
存储数据
遍历数据

IO体系结构:

1:异常概述和体系结构
2:异常的处理方案
3:普通异常和运行时异常的区别
4:finally关键字的特殊用法
5:自定义异常
6:File类的讲解
7:文件名称过滤器
8:递归(方法定义中调用方法本身的现象)
9:IO流的分类
10:字符流写入数据
11:字符流写入数据的常见问题
12:字符流读取数据
13:复制文本文件
14:字节流写入数据
15:字节流读取数据
16:字符缓冲区流
17:字节缓冲区流
18:测试缓冲区效率
19:字符缓冲区流的特殊功能
20:转换流(需要处理字符编码的时候)
21:打印流
22:序列化流
23:Properties
24:字符编码问题
25:IO流体系总结
IO流
|--字节流
|--InputStream
|--FileInputStream
|--BufferedInputStream
|--ObjectInputStream
|--OutputStream
|--FileOutputStream
|--BufferedOutputStream
|--PrintStream
|--ObjectOutputStream
|--字符流
|--Reader
|--InputStreamReader
|--FileReader
|--BufferedReader
|--Writer
|--OutputStreamWriter
|--FileWriter
|--BufferedWriter
|--PrintWriter
26:IO流最常见的操作:
复制文件


GUI图形界面:

1:java也可以做图像界面系统。但是做的不好。Eclipse。
2:java提供的包:
java.awt
javax.swing
3:组件:
组件:就是有成员变量和成员方法的对象
|--容器组件
|--基本组件
4:窗体案例
5:关闭窗体案例(事件监听机制+适配器模式)
6:在窗体上添加按钮,文本框,文件域
7:菜单案例
8:做GUI程序的工具Netbeans


多线程:

1:线程(进程的执行单元)
2:进程(正在运行的应用程序)
3:多线程程序的实现方案
A:继承Thread类
B:实现Runnable接口
4:线程运行的随机性
5:线程的生命周期图
6:线程的安全问题
7:解决线程的安全问题(通过同步技术)
8:线程间的通信(等待唤醒机制)


网络编程:

1:网络编程
2:网络编程的三要素
3:UDP协议实现数据发送和接收
4:TCP协议实现数据发送和接收


正则表达式:

1:就是符合某些规则的字符串
2:功能
A:判断功能
B:切割功能
C:替换功能
D:获取功能


反射:

1:通过class文件对象,去使用构造方法,成员变量,成员方法。
2:获取class文件对象
A:Object -- getClass()
B:数据类型 -- .class
C:Class -- forName()
3:反射操作:
A:反射获取构造方法并使用
B:反射获取成员变量并使用
C:反射获取成员方法并使用

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

0 0
原创粉丝点击