设计模式可以让代码具有复用性,遇到问题,可以先考虑能不能用设计模式解决。而且经过多年来的使用和优化,设计模式显得简单可靠。
设计模式被大致分为三类,创建型、结构型和行为型。这里先讲讲创建型。
1、抽象工厂模式(Abstract Factory)
一个抽象类(或接口),可以构造一系列同一风格的类的实例。
当你需要一个新的风格的对象时,再次实现这个抽象工厂就行了。
缺点:
- 并不是经常需要一系列的对象
2、建造者模式(Builder)
当一个类的构造过程十分复杂,或者比较容易出错时,可以考虑将类的构造从类中剥离出来。
例子:
- Android中的
AlertDialog.Builder
优点:
- 将过程简化
- 比构造方法更为安全
- 可以使用链式调用
缺点:
- 无法被继承,子类需要重新写
- 只能构造一个特定的类
3、工厂方法模式(Factory method)
通过一个方法来构造实例,方法通过参数来判断该构造哪个类,返回哪个实例。
工厂方法分为两种,一种是内部工厂方法,一种是静态工厂方法。
例子:
- Activity中的
getSystemService()方法 - Resouce中的
getDrawable()方法 - Fragment中的
newInstance()方法,属于静态工厂方法模式
优点:
- 扩展时,修改工厂方法就行了
- 专注于获取实例,不需要在乎是哪个类的实例
- 静态工厂方法比构造方法更为安全
缺点:
通过克隆原型,来构造类的实例
缺点:
保证一个类只有一个实例,使用静态。常用于像工厂这样,容易被重复使用,实例间又没有太大的区别的场景。
分为两种初始化方式,一种是饿汉式初始化,类被加载时或应用启动时初始化;另一种是懒汉式初始化,类被第一次使用时初始化实例。
例子:
- Picasso库
缺点:
- 需要注意在编写时注意多线程下,被多次初始化的问题