创建型模式:
单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式
结构型模式:
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式:
模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式
单例模式
核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
主要实现方式:
1.饿汉式(单例对象立即加载)
static变量会在装载类时初始化,此时不涉及多个线程访问该对象的问题,不会发生并发访问。线程安全,可以省略synchronized关键字。
2.懒汉式(单例对象延迟加载)
需加synchronized关键字,每次调用getInstance()方法都要同步。
3.静态内部类方式(也是懒加载)
外部类没有static属性,不会像饿汉式那样立即加载对象,只有真正调用getInstance(),才会加载静态内部类,线程安全。
进阶:防止反射和反序列化创建对象,需处理私有构造器和readResolve()方法。
工厂模式
实现了创建者和调用者的分离。
详细分类:简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式
用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)
工厂方法模式
用来生产同一等级结构中的固定产品。(支持增加任意产品)
为了避免简单工厂模式的缺点,不完全满足OCP(开闭原则)。
简单工厂模式只有一个工厂类,工厂方法模式有一组实现了相同接口的工厂类。
根据设计理论,建议使用工厂方法模式,实际上,一般使用简单工厂模式。
抽象工厂模式
用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
建造者模式
分离了对象子组件的单独构造(Builder负责)和装配(Director负责),适用于构造过程复杂的情况。不同的构造器、相同的装配,可做出不同的对象;相同的构造器、不同的装配顺序也可做出不同的对象,实现了构建算法和装配算法的解耦,更好的复用。往往可配合工厂模式一起使用。
原型模式
通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可使用原型模式。以某个对象为原型,复制出新的对象,效率高,避免了重新执行构造过程。new创建的对象属性是默认值,复制出的对象属性和原型对象完全相同,并且新对象改变不会影响原型对象。
实现:Cloneable接口(NSCopying协议)和clone方法(copy方法),注意深拷贝与浅拷贝(序列化与反序列化会深拷贝)。