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


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

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

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值