设计模式(一)创建型模式

设计模式可以让代码具有复用性,遇到问题,可以先考虑能不能用设计模式解决。而且经过多年来的使用和优化,设计模式显得简单可靠。
设计模式被大致分为三类,创建型、结构型和行为型。这里先讲讲创建型。

1、抽象工厂模式(Abstract Factory)

一个抽象类(或接口),可以构造一系列同一风格的类的实例。
当你需要一个新的风格的对象时,再次实现这个抽象工厂就行了。
缺点:

  • 并不是经常需要一系列的对象

2、建造者模式(Builder)

当一个类的构造过程十分复杂,或者比较容易出错时,可以考虑将类的构造从类中剥离出来。
例子:

  • Android中的AlertDialog.Builder

优点:

  • 将过程简化
  • 比构造方法更为安全
  • 可以使用链式调用

缺点:

  • 无法被继承,子类需要重新写
  • 只能构造一个特定的类

3、工厂方法模式(Factory method)

通过一个方法来构造实例,方法通过参数来判断该构造哪个类,返回哪个实例。
工厂方法分为两种,一种是内部工厂方法,一种是静态工厂方法。

例子:

  • Activity中的getSystemService()方法
  • Resouce中的getDrawable()方法
  • Fragment中的newInstance()方法,属于静态工厂方法模式

优点:

  • 扩展时,修改工厂方法就行了
  • 专注于获取实例,不需要在乎是哪个类的实例
  • 静态工厂方法比构造方法更为安全

缺点:

  • 静态工厂方法不能被继承,子类需要重新写一遍(内部方法可以继承)

    4、原型模式(Prototype)

通过克隆原型,来构造类的实例

缺点:

  • 只要实现Cloneable就等于是原型模式了,随处可见,真的还算是模式么= =

    5、单例模式(Singleton)

保证一个类只有一个实例,使用静态。常用于像工厂这样,容易被重复使用,实例间又没有太大的区别的场景。
分为两种初始化方式,一种是饿汉式初始化,类被加载时或应用启动时初始化;另一种是懒汉式初始化,类被第一次使用时初始化实例。

例子:

  • Picasso库

缺点:

  • 需要注意在编写时注意多线程下,被多次初始化的问题
分享到 评论