工厂模式的例子

图解Java多线程设计模式(豆瓣) - 豆瓣读书书上有一个挺好的例子, 可以解释到工厂模式的作用.

Thread是线程类, 而ThreadFactoryThread的工厂模式版本.

1
2
3
4
5
6
7
8
//Thread版本	
        new Thread(
            new Runnable() {
                public void run() {
                    //具体操作
                }
            }
        ).start();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//ThreadFactory版本	
public class Demo {
  
    private final ThreadFactory threadFactory;//ThreadFactory是接口

    public Host(ThreadFactory threadFactory) {
        this.threadFactory = threadFactory;//外部导入
    }

    public void request(final int count, final char c) {
      
        threadFactory.newThread(// 等同 new Thread(...)
            new Runnable() {
                public void run() {
                   //具体操作
                }
            }
        ).start();
    }
}

因为ThreadFactory是接口, 我们需要通过其实现类, 看看工厂模式干了什么.

1
2
3
4
5
6
7
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {
		Executors.defaultThreadFactory()//默认工厂
    }
}

源码里可见

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static class DefaultThreadFactory implements ThreadFactory {
	//...

    DefaultThreadFactory() {
    	//...    
    }

    //在new Thread(...)前后增加操作
    public Thread newThread(Runnable r) {
        Thread t = new Thread(group, r,
                              namePrefix + threadNumber.getAndIncrement(),
                              0);
        //...
        return t;
    }
}

该工厂类丰富了Thread的生成对象的生命周期 - 创建