1. 三大特性
封装
继承
多态
2. 单例模式
线程不安全问题: uniqueInstance 被实例化多次
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
// 懒汉式-线程不安全:多个线程可能同时进入 if (uniqueInstance == null)语句,实例化多次 uniqueInstance。
public static Singleton getUniqueInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// 懒汉式-线程安全:对 getUniqueInstance() 方法加锁,那么在一个时间点只能有一个线程能够进入该方法,从而避免了实例化多次 uniqueInstance。
public static synchronized Singleton getUniqueInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// 饿汉式-线程安全:直接实例化 uniqueInstance 的方式。但是丢失了延迟实例化带来的节约资源的好处。
private static Singleton uniqueInstance = new Singleton();
}
3. MVC模式
包括模型,视图,控制器三层:
模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
视图(View) - 界面设计人员进行图形界面设计。
控制器(Controller)- 负责转发请求,对请求进行处理。
三种模式的组合:
View层,单独实现了组合模式(组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶子对象。)
Model层和View层,实现了观察者模式
View层和Controller层,实现了策略模式(不同动物不同叫声)
4. JDK常用
装饰者模式:为对象动态添加功能,创建装饰者调用该对象。
- java.io.BufferedInputStream(InputStream)
- java.io.DataInputStream(InputStream)
- java.io.BufferedOutputStream(OutputStream)
- java.util.zip.ZipOutputStream(OutputStream)
- java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap
适配器模式:把一个类接口转换成另一个用户需要的接口。
- java.util.Arrays#asList()
- java.util.Collections#list()
- java.util.Collections#enumeration()
- javax.xml.bind.annotation.adapters.XMLAdapter
迭代器模式:提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。