定义

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

类型

创建型模式

介绍

工厂模式比较简单,我直接拿实际的一个例子说明
当前Android有三种key_value序列化方式,分别是SharedPreferences 、
MMKV、DataStore 。这三个库,各个项目都有分别使用,为了方便迁移。
我们可以使用一个Data接口,去规定里面的方法。如果后续有新的库,也
可以通过这个接口实现好,简单替换。

示例

定义一个接口,提供能力(只有了add方法做演示)

public interface Data {void add();
}

封装SharedPreferences 时使用Data接口规范能力

public class SharedPreferences implements Data {private  final String TAG = this.getClass().getSimpleName();@Overridepublic void add() {Log.d(TAG, "使用SharedPreferences 进行add");}
}

封装MMKV 时使用Data接口规范能力

public class MMKV  implements Data{private  final String TAG = this.getClass().getSimpleName();@Overridepublic void add() {Log.d(TAG, "使用MMKV 进行add");}
}

封装DataStore 时使用Data接口规范能力

public class DataStore implements Data {private final String TAG = this.getClass().getSimpleName();@Overridepublic void add() {Log.d(TAG, "使用DataStore 进行add");}
}

简单静态工厂模式

通过使用DataFactory 类传入不同的类型,返回不同的Data库

public class DataFactory {public static final String SP = "SharedPreferences";public static final String MMKV = "MMKV";public static final String DATA_STORE = "DATA_STORE";/*** 创建一个IData类,默认是SharedPreferences** @param type 类型* @return IData*/public static IData create(String type) {IData iData = null;switch (type) {case MMKV:iData = new MMKVUtils();break;case DATA_STORE:iData = new DataStoreUtils();break;default:iData = new SharedPreferencesUtils();break;}return iData;}}

这只是一个简单的例子,正常创建一个对象应该是更加复杂的。比如:创建一个类需要传入特定的参数,特定的参数中可能有一些复杂的类,还需要使用者去深入了解。还有一些类不能直接使用new出来的对象等等问题。

当然还有一种多方法工厂模式可能使用更加简单

public class DataFactory {public static final String SP = "SharedPreferences";public static final String MMKV = "MMKV";public static final String DATA_STORE = "DATA_STORE";public static IData getSharedPreferences() {return new SharedPreferencesUtils();}public static IData getMMKV() {return new MMKVUtils();}public static IData getDataStore() {return new SharedPreferencesUtils();}}

这种写法属于直接调用方法,甚至不需要查看工厂类有哪些成员变量。
两种都是属于简单工厂模式,选择一个方便理解的使用即可。其实在类型少的时候看起来区别不大,当类型多了,就看是使用if简单还是方法简单。

总结

工厂模式还是比较简单看懂的。通过上面示例,我们不管使用MMKV还是SharedPreferences ,add方法的参数和功能是一样的
具体怎么实现由各个类来完成。特别适合框架迁移。而且我们也不需要关心着三个Data框架是怎么创建出来的。
我们创建Data库对象时无需关注是怎么创建的,直接传入类型获取data对象
通过Data接口统一了,各个仓库提供的能力。

此模式不属于23种设计者模式,但是它是所有工厂模式的基础

Android 简单工厂模式相关推荐

  1. android常用的工厂模式,Android的设计模式-简单工厂模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...

  2. 工厂模式 android,当Android遇见工厂模式

    设计模式.png 我们先看一下一个Android系统应用中的工厂模式列子,再讲解工厂模式. package com.android.mms.ui; import android.content.Con ...

  3. 简单工厂模式(静态工厂模式)

    简单工厂模式 工厂方法模式可以缩小为简单工厂模式(静态工厂模式). 工厂方法模式: 简单工厂模式: 去掉了一个抽象的工厂类.而且一般情况下简单工厂类的create()方法是静态方法. 举个与工厂方法模 ...

  4. 二次封装图片第三方框架——简单工厂模式的运用

    CSDN首发地址: 前言 写在前头,这篇博客对于老司机们没什么多大的意义,老司机们就不用看了,对于新手还是有很大实用价值的. 平时在项目中,你们有没有遇到这样的情况,比如之前项目是使用开源框架Imag ...

  5. 大话设计模式1 简单工厂模式 策略模式

    终于得空,本来想看看android的源码,但是想起以前看源码时总有点晕,不清楚为什么要这样设计代码结构,所以决定先把设计模式的相关知识学习一下. 买了n久的大话设计模式啊..终于下定决心开始啃了... ...

  6. 设计模式之简单工厂模式

    一.概述 工厂模式具体包括了简单工厂.工厂方法.抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式.   但是它是理解其它的工厂模式的一个很好 ...

  7. 设计模式 之美 -- 简单工厂模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现 C++实现: C语言实现 4. 缺点 1. 解决问题 举例如下: 我们实现一个卖衣服的功能,衣服的种类有很多:帽子,裤子,T恤... 每卖一种衣服 ...

  8. 设计模式之简单工厂模式(Simply Factory)摘录

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  9. Java中的简单工厂模式(转)

    Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 话说:"天地开辟,未有人民,女娲抟土为人."女娲需要用土造出一个个的人,但在女娲造出人之前, ...

最新文章

  1. python爬虫下载-python爬虫之下载文件的方式总结以及程序实例
  2. BADI 修改采购订单的shipping point示例
  3. l启动进程 linux,《日子》. linux 查看进程启动路径
  4. vscode生成vue模板快捷键_VSCode一键生成.vue模版
  5. vld不输出泄漏信息_UV固化设备不单单只有灯管!还有哪些辅动部件?
  6. Nginx日志分割处理
  7. scala 类的多态_Scala多态方法和显式引用
  8. VMware mac虚拟机如何安装Windows系统
  9. winform 项目获取app.config 中appSettings节点数据
  10. C++中acculumate函数使用
  11. 景深 (摄影测量与遥感学术语)
  12. Java是什么,Java是什么意思。
  13. IJCAI 2022|边界引导的伪装目标检测模型BGNet
  14. 数字内容安全实验一:使用Matlab编程实现 RSA 加密算法
  15. python 实现三维向量之间的夹角
  16. 远程开机并不难 用开机棒轻松打开局域网多台电脑
  17. 从零开始—仿牛客网讨论社区项目(六)
  18. 低功耗蓝牙设备DA1458x芯片开发之更新连接参数
  19. thinkphp使用phpqrcode类生成二维码
  20. camstar自定义function

热门文章

  1. 原生JS实现拼图游戏
  2. 统计大写字母和小写字母的个数
  3. pwrite,pread
  4. ftp传输最后一直卡在最后10秒_迅雷下载总卡在最后99 9%详细处理方法【图文】...
  5. yum卸载任何软件程序
  6. 菜鸟Python之————题海战术(2)
  7. 最小费用流matlab,计算最小费用最大流MATLAB源代码.doc
  8. sigmoid函数和tanh函数和relu函数和leaky_relu函数
  9. AVAudioRecorder
  10. 2020 Dubbo面试题大全