1 面向对象的六大原则
- 单一职责原则
英文名称:Single Responsibility Principle,缩写SRP。定义:对于一个类而言,应该仅有一个引起它变化的原因。 - 开闭原则
英文名称:Open Close Principle,缩写OCP。定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,对于修改是封闭的。 - 里氏替换原则
英文名称:Liskov Substitution Principle,缩写LSP。定义:所有引用父类的地方必须能够透明地使用其子类的对象。 - 依赖倒置原则
英文名称:Dependency Inversion Principle,缩写DIP。定义:通过高层次的模块不依赖低层次的模块的实现细节达到解耦的目的。 - 接口隔离原则
英文名称:Interface Segregation Principle,缩写ISP。定义:类间的依赖关系应该建立在最小的接口上。 - 最少知识原则
英文名称:Least Knowledge Principle,缩写LKP。定义:一个对象应该对其他对象有最少的了解。
2 单例模式
单例模式须确保线程安全、防止反序列化导致重新生成实例。
常用的实现方式如下:
- Double CheckLock (DCL)
public class Singleton {
private static Singleton sInstance;
private Singleton() {
}
public static Singleton getInstance() {
if (sInstance == null) {
synchronized (Singleton.class) {
if (sInstance == null) {
sInstance = new Singleton();
}
}
}
return sInstance;
}
}
优点:延迟加载,减少了同步开销
缺点:高并发环境下有很少概率的缺陷导致单例模式失效
- 静态内部类单例模式
public class Singleton {
private static class SingletonHolder {
private static final Singleton sInstance = new Singleton();
}
private Context mContext;
private Singleton() {
}
public static Singleton getsInstance() {
return SingletonHolder.sInstance;
}
public Singleton init(Context context) {
if (context != null && mContext == null) {
mContext = context.getApplicationContext();
}
return this;
}
}
优点:延迟加载,线程安全,推荐使用的单例模式
3 Builder模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。