2019-06-28:谈一谈单例模式,建造者模式,工厂模式的使用场景?如何合理选择?
MoJieBlog opened this issue · comments
MoJieBlog commented
2019-06-28:谈一谈单例模式,建造者模式,工厂模式的使用场景?如何合理选择?
yangfanggang commented
抛砖引玉
单例模式 顾名思义,只有一个实例,一般用来网络请求的实例
建造者模式,不是很熟悉,AlertDialog的创建使用的是这个
工厂模式,批量生产相似的产品,可用来设计Activity的基类
魏興 commented
- 单例模式,一般是指将消耗内存、属性和对象支持全局公用的对象,应该设置为单例模式,如持久化处理(网络、文件等)
- 建造者模式,一般见于开发的框架或者属性时可以直接链式设置属性,比如我们看到的
AlertDialog
,一般用在某些辅助类(如BRVAH
的BaseViewHolder
)或者开发的框架的时候方便连续设置多个属性和调用多个方法。 - 工厂模式,一般用于业务的实体创建,在创建的过程中考虑到后期的扩展。在
Android
源码中比较常见的有BitmapFactory
`LayoutInflater.Factory,在实体编码的过程中,比如
BRVAH的多布局,如果数据类型比较多或者后期需要扩展,则可以通过工厂布局的方式,将实现
MultiItemEntity `接口的实体通过工厂模式创建:
object MultiItemEntityFactory{
val TEXT = 1
val IMG = 2
val TEXT_IMG = 3
fun createBean(type:Int): MultiItemEntity {
when(type){
TEXT -> return BeanA()
IMG -> return BeanB()
TEXT_IMG -> return BeanC()
else -> return BeanA()
}
}
}
class MultipleItemQuickAdapter(data: List<*>) : BaseMultiItemQuickAdapter<MultiItemEntity, BaseViewHolder>(data) {
init {
addItemType(MultipleItem.TEXT, R.layout.text_view)
addItemType(MultipleItem.IMG, R.layout.image_view)
}
override fun convert(helper: BaseViewHolder, item: MultipleItem) {
...
}
}
zhangmingzhu commented
- 单例模式:保证全局只有一个实例,如网络请求
- 建造者模式:用于需要设置比较多的属性可以用直接链式,如AlerDialog
- 工厂模式:用于业务的实体类创建,易于扩展,如BitMapFactory
AJiang commented
简单工厂:一工厂 多产品;
工厂方法:多工厂 多产品;