一、设计模式原则
- 单一职责
- 开放封闭
- 里氏替换
所有引用基类的地方都能透明地替换为子类对象,即可以在定义时尽量使用基类对象,等到运行时再确定其子类类型,用子类对象来替换父类对象。 - 依赖倒置
- 迪米特原则
一个软件实体应该尽可能少地与其它实体发生相互作用,即最少知识原则。如果一个对象需要调用其它对象的某个方法,可以通过第三者来调用,这个第三者的作用就如Android中的事件总线EventBus一样。 - 接口抽离
二、设计模式分类
- 创建型
(5种)单例、工厂方法、抽象工厂、建造者、原型 - 结构型
(7种)适配器、装饰、代理、外观、桥接、组合、享元 - 行为型
(11种)策略、模板方法、观察者、迭代器、责任链、命令、备忘录、状态、访问者、中介者、解释器
三、Android常见设计模式
1. 创建型设计模式
单例模式
(1).饿汉模式
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
public static Singleton getSingleton() {
return singleton;
}
}
(2).双重检查模式DCL
public class Singleton {
//保证对象原子性,在不同线程中改变值,每个线程都取主线程值,保证数据一致性
private volatile static Singleton singleton;
private Singleton() {
}
public static Singleton getInstance() {
if (null == singleton) {
synchronized (Singleton.class) {
if (null == singleton) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
(3)静态内部类单例模式
public class Singleton {
private Singleton() {
}
public static Singleton getInstance() {
//确保实例再调用方法是才创建,避免消耗内存
return SingletonHolder.mSingleton;
}
private static class SingletonHolder {
private static final Singleton mSingleton = new Singleton();
}
}
工厂方法模式
工厂方法有以下角色:
- 抽象产品类
- 具体产品类
- 抽象工厂类:返回一个泛型的产品对象
- 具体工厂类:返回具体的产品对象
//抽象产品类
public abstract class