一、使用工厂模式:传入一个class类来决定是哪一个产品类

来源:互联网 发布:mac最好用的压缩软件 编辑:程序博客网 时间:2024/04/28 13:49

一、工厂模式及其优化版本

需要那个产品就创建对应产品的工厂

需要那个类的对象就传入那个类的类型

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的碎片化管理(明天将案例加上!)

0 0