android 工厂方法模式应用场景,Android的设计模式-工厂方法模式

前言

Android的设计模式系列文章介绍:欢迎关注,持续更新中:

1.定义

定义一个用于创建对象的接口,让子类决定实例化哪个类。

2.介绍

工厂方法模式属于创建型模式。

工厂方法模式主要用来创建复杂的对象,简单对象能够使用new来创建就不用工厂方法模式来创建了。

3.UML类图

e6c02a54f447

工厂方法模式UML类图.png

角色说明:

Product(抽象产品类):要创建的复杂对象,定义对象的公共接口。

ConcreteProduct(具体产品类):实现Product接口。

Factory(抽象工厂类):该方法返回一个Product类型的对象。

ConcreteFactory(具体工厂类):返回ConcreteProduct实例。

4.实现

4.1 创建抽象产品类,定义公共接口:

//抽象产品类

public abstract class Product {

public abstract void show();

}

4.2 创建具体产品类,继承Product类:

//具体产品类A

public class ProductA extends Product {

@Override

public void show() {

System.out.println("product A");

}

}

//具体产品类B

public class ProductB extends Product {

@Override

public void show() {

System.out.println("product B");

}

}

4.3 创建抽象工厂类,定义公共接口:

//抽象工厂类

public abstract class Factory {

public abstract Product create();

}

4.4 创建具体工厂类,继承抽象工厂类,实现创建具体的产品:

//具体工厂类A

public class FactoryA extends Factory {

@Override

public Product create() {

return new ProductA();//创建ProductA

}

}

//具体工厂类B

public class FactoryB extends Factory {

@Override

public Product create() {

return new ProductB();//创建ProductB

}

}

4.5 测试方法:

public void test() {

//产品A

Factory factoryA = new FactoryA();

Product productA = factoryA.create();

productA.show();

//产品B

Factory factoryB = new FactoryB();

Product productB = factoryB.create();

productB.show();

}

5.应用场景

生成复杂对象时,无需知道具体类名,只需知道相应的工厂方法即可。

6.优点

符合开放封闭原则。新增产品时,只需增加相应的具体产品类和相应的工厂子类即可。

符合单一职责原则。每个具体工厂类只负责创建对应的产品。

7.缺点

一个具体工厂只能创建一种具体产品。

增加新产品时,还需增加相应的工厂类,系统类的个数将成对增加,增加了系统的复杂度和性能开销。

引入的抽象类也会导致类结构的复杂化。

8.Android中的源码分析

Android中的ThreadFactory就是使用了工厂方法模式来生成线程的,线程就是ThreadFactory的产品。

8.1 ThreadFactory相关源码分析

//抽象产品:Runnable

public interface Runnable {

public abstract void run();

}

//具体产品:Thread

public class Thread implements Runnable {

//构造方法

public Thread(Runnable target, String name) {

init(null, target, name, 0);

}

@Override

//实现抽象产品的抽象方法

public void run() {

if (target != null) {

target.run();

}

}

//其他代码略

}

//抽象工厂:ThreadFactory

public interface ThreadFactory {

Thread newThread(Runnable r);

}

//具体工厂:AsyncTask中的实现

private static final ThreadFactory sThreadFactory = new ThreadFactory() {

private final AtomicInteger mCount = new AtomicInteger(1);

//实现抽象工厂的抽象方法

public Thread newThread(Runnable r) {

return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());//返回Thread这个产品

}

};

8.2 总结:

这里只要是介绍Android系统中工厂方法模式的应用,线程和AsyncTask的原理就不说了。

通过ThreadFactory,我们可以创建出不同的Thread来。

同样,我们可以创建另外类似的工厂,生产某种专门的线程,非常容易扩展。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值