前言
面试的时候被问到了,jdk的设计原理。学的都是框架的设计模式,工厂模式,代理模式,单例模式等等,一直没想过jdk为什么要这么设计。
类间的关系有五种
继承, 委托, 依赖,聚合,组合
单例模式Singleton
作用:是为了保证类中只有一个实现类,提供全局的访问点。
Runtime
静态工厂Factory
作用:代替构造函数创建对象 方法名比构造函数更清晰
Interger.valueOf
Class.forName
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
private static native Class<?> forName0(String name, boolean initialize,
ClassLoader loader,
Class<?> caller)
throws ClassNotFoundException;
工厂方法Factory Method
作用:子类决定哪一个类实现
抽象工厂Abstract Factory
作用:创建某一种类的对象
构造者模式 Builder
作用:将构造逻辑提到单独的类中,分离类的构造逻辑和表现
原型模式Prototype
作用:复制对象 浅拷贝,深拷贝
.clone方法
适配器模式Adapter
作用:使不兼容的接口相容
java.io.InputStreamReader
桥接模式Bridge
作用:将抽象部分与其实现部分分离,使他们都可以独立的变化
装饰器模式Decorator
作用:为类添加新的功能,防止类继承带来爆炸式的增长
java.io包
享元模式Flyweight
作用:共享对象,节省内存
Integer.valueOf
String的常量池
代理模式Proxy
作用:透明调用被代理模式,无须知道复杂的实现细节。增强被代理类的功能
观察者模式Observer
通知对象状态改变
模板模式
作用:定义算法的结构,子类只实现不同的部分
ThreadPoolExecutor.Worker
策略模式
作用:提供不同的算法
THreadPoolExecutor四种拒绝策略
责任链模式
作用:请求会被链上的对象处理,但是客户端不知道哪些请求会被哪些对象处理。
ClassLoader的双亲委派机制
后记
慢慢整理,慢慢学习。