Android设计模式--工厂模式

一,定义

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

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

二,使用场景

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

三,工厂模式简单使用

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

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

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

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

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

下面来看一个简单的案例

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

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

java 复制代码
public interface Phone {
    void call();
}

创建具体的产品类:

java 复制代码
public class PhoneA implements Phone{
    private static final String TAG = "phoneA";

    @Override
    public void call() {
        Log.d(TAG,"我是手机A");
    }
}
java 复制代码
public class PhoneB implements Phone{
    private static final String TAG = "PhoneB";
    @Override
    public void call() {
        Log.d(TAG,"我是手机B");
    }
}

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

java 复制代码
public interface Factory {

    Phone createPhone();
}

创建具体的工厂类:

java 复制代码
public class FactoryPhoneA implements Factory{
    @Override
    public PhoneA createPhone() {
        return new PhoneA();
    }
}
java 复制代码
public class FactoryPhoneB implements Factory{
    @Override
    public PhoneB createPhone() {
        return new PhoneB();
    }
}

使用:

java 复制代码
FactoryPhoneA factoryA =new FactoryPhoneA();
PhoneA phone =factoryA.createPhone();
phone.call();
FactoryPhoneB factoryB=new FactoryPhoneB();
PhoneB phoneB =factoryB.createPhone();
phoneB.call();

输出:

四,使用反射的工厂模式

还是上面的例子

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

java 复制代码
public interface Factory<T extends Phone> {

    T createPhone(Class<T> tClass);
}

具体的工厂类改造为:

java 复制代码
public class PhoneFactory<T extends Phone> implements Factory<T>{
    @Override
    public T createPhone(Class<T> tClass) {
        Phone phone =null;
        try {
            phone = (Phone) Class.forName(tClass.getName()).newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return (T) phone;
    }
}

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

java 复制代码
PhoneFactory phoneFactory =new PhoneFactory();
Phone phone1 = phoneFactory.createPhone(PhoneA.class);
phone1.call();
Phone phone2 = phoneFactory.createPhone(PhoneB.class);
phone2.call();

输出:

五,总结

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

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

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

相关推荐
AI人工智能+电脑小能手3 小时前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc
码匠许师傅8 小时前
【设计模式精讲】4.单例模式(Singleton)
c++·单例模式·设计模式
雾削木8 小时前
2026 编程领域热点知识速览:AI 辅助开发、设计模式实战与嵌入式高效迭代
人工智能·设计模式
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-42-访问者模式(业务实战篇)
java·spring·设计模式·访问者模式·asm·营销规则·数据结构与操作分离
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-43-访问者模式(源码剖析篇)
java·设计模式·访问者模式·源码分析·elementvisitor·asm classvisitor·spring spel
Michael_lcf2 天前
Agent设计模式:思考-行动-观察循环的本质与局限
设计模式·agent设计模式·agent设计模式的本质
丰锋ff2 天前
设计模式学习笔记
笔记·学习·设计模式
米啦啦.2 天前
设计模式/
观察者模式·单例模式·设计模式·工厂模式
QuZhengRong2 天前
【AI】Agent 全栈进阶|Agent 设计模式
人工智能·学习·设计模式·llm·agent
码匠许师傅2 天前
【设计模式精讲】2. 设计原则基石:SOLID 与几条关键原则
java·设计模式·log4j