Abstract Factory(抽象工厂)
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
啥意思?就是把生产抽象成一个接口,每个实例类都对应一个工厂类(普通工厂只有一个工厂类),同时所有工厂类都继承这个生产接口。
生产接口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),有兴趣的小伙伴可以去扒一扒。
本文介绍了抽象工厂模式,它提供创建一系列相关或依赖对象的接口,无需指定具体类。把生产抽象成接口,各实例类对应工厂类,所有工厂类继承生产接口,系统具备动态扩展功能。还举例了AsyncTask的抽象工厂实现,在Android中易于扩展。
1007

被折叠的 条评论
为什么被折叠?



