3.3 -3.5 主要介绍了3中设计模式
1. 工厂方法模式
设计模式中经典的工厂模式之一,介绍工厂模式需要先说下简单工厂模式,简单工厂模式的本质是由一个工厂类,提供静态创建函数,通过入参的不同来创建不同的产品类,产品类需要实现统一的接口。但是简单工厂模式违背了开闭原则,因为增加新的产品需要修改工厂类的实现。而工厂方法模式则对工厂类也进行了抽象,不同的产品对应不同的工厂类,工厂类实现共同的接口,创建产品类时先创建对应的工厂类,再生成产品类,新增产品类只需要新增工厂类即可,无需改动先有的工厂类。
2. 原型模式
用的比较少,一般用在初始化对象成本比较大,又需要频繁复制且有小改动的地方,书中举了编辑器支持音乐编辑功能的例子。可能用报表来举例更好理解,从数据库中读数据生成基础报表对象,然后实现clone方法,通过基础报表对象进行复制组合后生成其他对象,比如说添加标头,进行上传之类的,会比每次都初始化性能高很多。
3. 单例模式
非常常用,避免了重复初始化对象的开销,基础库中MySQL和redis的使用都是基于单例来使用,GO的sync.Once 包对于实现单例提供了非常方便的支持
1. 工厂方法模式
设计模式中经典的工厂模式之一,介绍工厂模式需要先说下简单工厂模式,简单工厂模式的本质是由一个工厂类,提供静态创建函数,通过入参的不同来创建不同的产品类,产品类需要实现统一的接口。但是简单工厂模式违背了开闭原则,因为增加新的产品需要修改工厂类的实现。而工厂方法模式则对工厂类也进行了抽象,不同的产品对应不同的工厂类,工厂类实现共同的接口,创建产品类时先创建对应的工厂类,再生成产品类,新增产品类只需要新增工厂类即可,无需改动先有的工厂类。
2. 原型模式
用的比较少,一般用在初始化对象成本比较大,又需要频繁复制且有小改动的地方,书中举了编辑器支持音乐编辑功能的例子。可能用报表来举例更好理解,从数据库中读数据生成基础报表对象,然后实现clone方法,通过基础报表对象进行复制组合后生成其他对象,比如说添加标头,进行上传之类的,会比每次都初始化性能高很多。
3. 单例模式
非常常用,避免了重复初始化对象的开销,基础库中MySQL和redis的使用都是基于单例来使用,GO的sync.Once 包对于实现单例提供了非常方便的支持