抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
啥意思?就是把生产抽象成一个接口,每个实例类都对应一个工厂类(普通工厂只有一个工厂类),同时所有工厂类都继承这个生产接口。
生产接口Provider:
interface Provider {
Animal produce();
}
每个产品都有自己的工厂
CatFactory:
public class CatFactory implements Provider{
@Override
public Animal produce() {
// TODO Auto-generated method stub
return new Cat();
}
}
DogFactory:
public class DogFactory implements Provider{
@Override
public Animal produce() {
// TODO Auto-generated method stub
return new Dog();
}
}
产品生产:
Provider provider = new CatFactory();
Animal cat =provider.produce();
cat.move();
现在我们要加入panda,直接新建一个pandaFactory就行了,这样我们系统就非常灵活,具备了动态扩展功能。
Android中的Factory
比如AsyncTask的抽象工厂实现:
工厂的抽象:
public interface ThreadFactory {
//省略为备注
Thread newThread(Runnable r);
}
产品的抽象(new Runnable就是其实现类):
public interface Runnable {
//省略为备注
public abstract void run();
}
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());
}
};
我们可以创建另外类似的工厂,生产某种专门的线程(多线程),非常容易扩展。
当然,android中的应用还有很多(比如BitmapFactory),有兴趣的小伙伴可以去扒一扒。