• Android设计模式--工厂模式


    一,定义

    工厂模式与Android 设计模式--单例模式-CSDN博客Android设计模式--Builder建造者模式-CSDN博客Android设计模式--原型模式-CSDN博客 一样,都是创建型设计模式。

    工厂模式就是定义一个用于创建对象的接口,让子类决定实例化哪个类

    二,使用场景

    在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。

    三,工厂模式简单使用

    工厂模式主要分为四个模块:

    1,抽象工厂,其为工厂模式的核心

    2,具体工厂,其实现了具体的业务逻辑

    3,抽象产品,是工厂方法模式所创建的产品的父类

    4,具体产品,为实现抽象产品的某个具体产品的对象

    下面来看一个简单的案例

    某手机工厂可以生产三种手机,分别是手机A,手机B,手机C。

    创建一个抽象的产品接口:

    1. public interface Phone {
    2. void call();
    3. }

    创建具体的产品类:

    1. public class PhoneA implements Phone{
    2. private static final String TAG = "phoneA";
    3. @Override
    4. public void call() {
    5. Log.d(TAG,"我是手机A");
    6. }
    7. }
    1. public class PhoneB implements Phone{
    2. private static final String TAG = "PhoneB";
    3. @Override
    4. public void call() {
    5. Log.d(TAG,"我是手机B");
    6. }
    7. }

    创建一个抽象的工厂接口:

    1. public interface Factory {
    2. Phone createPhone();
    3. }

    创建具体的工厂类:

    1. public class FactoryPhoneA implements Factory{
    2. @Override
    3. public PhoneA createPhone() {
    4. return new PhoneA();
    5. }
    6. }
    1. public class FactoryPhoneB implements Factory{
    2. @Override
    3. public PhoneB createPhone() {
    4. return new PhoneB();
    5. }
    6. }

    使用:

    1. FactoryPhoneA factoryA =new FactoryPhoneA();
    2. PhoneA phone =factoryA.createPhone();
    3. phone.call();
    4. FactoryPhoneB factoryB=new FactoryPhoneB();
    5. PhoneB phoneB =factoryB.createPhone();
    6. phoneB.call();

    输出:

    四,使用反射的工厂模式

    还是上面的例子

    抽象工厂接口可以改造为:

    1. public interface Factoryextends Phone> {
    2. T createPhone(Class tClass);
    3. }

    具体的工厂类改造为:

    1. public class PhoneFactoryextends Phone> implements Factory{
    2. @Override
    3. public T createPhone(Class tClass) {
    4. Phone phone =null;
    5. try {
    6. phone = (Phone) Class.forName(tClass.getName()).newInstance();
    7. } catch (Exception e) {
    8. throw new RuntimeException(e);
    9. }
    10. return (T) phone;
    11. }
    12. }

    这样在使用的时候,就class来动态的加载对象:

    1. PhoneFactory phoneFactory =new PhoneFactory();
    2. Phone phone1 = phoneFactory.createPhone(PhoneA.class);
    3. phone1.call();
    4. Phone phone2 = phoneFactory.createPhone(PhoneB.class);
    5. phone2.call();

    输出:

    五,总结

    总的来说,工厂模式是一个很好的设计模式,可以很优雅的创建对象,也符合设计原则。

    缺点就是每增加一个新的产品,就会增加一个新的产品类,同时还要引入抽象层,这必然会导致类结构的复杂化,所以,在某些情况比较简单时,就没有必要非要去使用工厂模式。

    参考文献:Android源码设计模式解析与实战第二版

  • 相关阅读:
    Air001 TIM1高级定时器单脉冲输出模式使用
    Azure Storage 系列(八)存储类型细化分类说明
    “快看”cms代码审计
    机器学习-SVM算法
    面试完我感觉五味杂陈,八年 Android 开发这种水平要20k?
    MySQL SQL语法基础
    修复Apache Shiro身份认证绕过漏洞 (CVE-2022-32532)步骤注意事项
    Flink 1.13 源码解析——JobManager启动流程之Dispatcher启动
    中国智能音箱市场销量下降,百度稳居第一 /中国即评出10个大模型创新案例 |魔法半周报
    【Recommend System】----CTR 建模
  • 原文地址:https://blog.csdn.net/y2653904/article/details/134409301