一、工厂模式及其优化版本
public abstract class Product {
public abstract void method();
}
public class ConcreteProductA extends Product {
@Override
public void method() {
System.out.println("我是产品A");
}
}
public class ConcreteProductB extends Product {
@Override
public void method() {
System.out.println("我是产品B");
}
}
public abstract class Factory {
public abstract <T extends Product> T createProduct(Class<T> cls);
}
/**
* Created by Administrator on 2016/12/7.
*/
public class ConcreteFactory extends Factory {
//利用反射的方式更简洁地来生产具体的产品对象,需要在工厂方法的参数列表中传入一个class类来决定是那个产品类
@Override
public <T extends Product> T createProduct(Class<T> cls) {
Product p = null;
try {
p = (Product) Class.forName(cls.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return (T) p;
}
}
public class Test {
public static void main(String[] args){
Factory factory = new ConcreteFactory();
//需要哪个类的对象就传入那个类的类型即可,这种方式比较简洁、动态
Product product = factory.createProduct(ConcreteProductB.class);
product.method();
}
}
工厂模式的优点:降低了对象的耦合,将实力化的任务交由子类去完成,有非常好的扩展性
缺点:每次为工厂方法模式添加新的产品时就要编写一个新的产品类,同时还要引入抽象层,导致类结构的复杂化。
实际的应用场景
二、Activity中Fragment的碎片化管理(明天将案例加上!)