android工厂模式源码,Android源码设计模式——工厂模式

工厂模式也是为了构建一个新的对象,它是创建型模式的一种。

Android源码设计模式——Build模式(应用:AlertDialog源码分析)

上述是之前的Build模式,也是创建型模式一种,不懂的小伙伴可以回看下上篇博客。

工厂模式的定义

自我叙述:定义一个抽象产品类,然后继承该抽象类形成很多的子类,在子类相当于是个:成品的产品,也就是我们真正要构建的产品。在定义一个抽象类,该抽象类内部:创建子类的公共方法定义。在定义真正的工厂实现类,继承自该抽象类。

由此看下工厂模式的UML图:

UML图

e06155350ab6ed2fb149e33b6036d465.png

上图,分四块:

ABS Product —— 产品抽象类

ConcreteProduct —— 产品实现类

Abs Factory —— 抽象工厂类

ConcreteFactory —— 工厂实现类

根据上述代码,写一个例子感受下,还是以我们的小汽车为例:

Abs Product 小汽车的框架

不管什么小汽车,他们都需要:轮子,发动机,车灯等公用零件

public abstract class AbsCar {

protected String wheel; //轮子

protected String engine; //发动机

protected String lampBulb; //车灯

// ........等等公共零件

protected abstract void setWheel(String wheel);

protected abstract void setEngine(String engine);

protected abstract void setLampBulb(String lampBulb);

}

具体生产的小汽车

根据公共的生产小汽车标准,我们演化出了众多类型的车,比如:奔驰,丰田。

public class ConcreteBenzCar extends AbsCar {

private final static String TAG = "奔驰汽车";

@Override

protected void setWheel(String wheel) {

Log.e(TAG, "构造轮子");

}

@Override

protected void setEngine(String engine) {

Log.e(TAG, "构造发动机");

}

@Override

protected void setLampBulb(String lampBulb) {

Log.e(TAG, "构造车灯");

}

}

public class ConcreteToyotaCar extends AbsCar {

private final static String TAG = "丰田汽车";

@Override

protected void setWheel(String wheel) {

Log.e(TAG, "构造轮子");

}

@Override

protected void setEngine(String engine) {

Log.e(TAG, "构造发动机");

}

@Override

protected void setLampBulb(String lampBulb) {

Log.e(TAG, "构造车灯");

}

}

我们构造了两种类型的小汽车:奔驰和丰田。同理,也可以以抽象类为基准,生产出各种各样类型的小汽车。

构建小汽车的工厂标准

由于我们生成小汽车是需要工厂的,不同的汽车工厂标准都是一样的:生产出汽车。

public abstract class AbsFactory {

public abstract T createProduct(Class mClass);

}

现在创建工厂的标准有了,该创建工厂了

创建工厂实现类

public class ConcreteCarFactory extends AbsFactory {

//***********************方法1*************************//

public ConcreteBenzCar createBenz() {

ConcreteBenzCar car = new ConcreteBenzCar();

//TODO: 构造

return car;

}

public ConcreteToyotaCar createToyota() {

ConcreteToyotaCar car = new ConcreteToyotaCar();

//TODO:构造

return car;

}

//***********************方法2*************************//

@Override

public T createProduct(Class mClass) {

T object = null;

try {

object = (T) Class.forName(mClass.getName()).newInstance();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

}

return object;

}

}

上文定义了两种方法

直接创建产品

通过反射创建产品

实际上关于使用工厂模式,我觉得还是得根据项目实际出发的。

有的人说:Activity的onCreate方法的调用就属于工厂模式,但是我是在看不出来。关于Activity的启动流程分析博客:

Android进阶3:Activity源码分析(1) —— Activity启动流程(8.0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值