美文网首页
抽象工厂+反射

抽象工厂+反射

作者: Mrko0630 | 来源:发表于2017-07-25 22:12 被阅读0次

  • 抽象产品类
public abstract class AbstractProduct {
    abstract void method();
}
  • 具体产品类
public class ProductOne extends AbstractProduct {
    @Override
    void method() {
        System.out.println("Product ONE");
    }
}
public class ProductTwo extends AbstractProduct {
    @Override
    void method() {
        System.out.println("Product TWO");
    }
}
  • 抽象工厂类
public abstract class AbstractFactory {
//       public abstract AbstractProduct Product(String type);
       public abstract <T extends AbstractProduct> T Product(Class<T> tClass);
}
  • 具体工厂类
public class SpecificFactory extends AbstractFactory {
    //通过映射拿到Class的Instance、
    @Override
    public <T extends AbstractProduct> T Product(Class<T> tClass) {
        AbstractProduct product=null;
        try {
            product=(AbstractProduct) tClass.forName(tClass.getName()).newInstance();
        }catch (Exception e){
            e.printStackTrace();
        }

        return (T) product;
    }
//    原始的需要传类型过来进行判断生产那种产品
//    @Override
//    public AbstractProduct Product(String type) {
//       if ("ProductOne".equalsIgnoreCase(type)){
//           return new ProductOne();
//       }else if ("ProductTwo".equalsIgnoreCase(type)){
//           return new ProductTwo();
//       }else {
//          System.out.println("type is unknow");
//           return null;
//       }
//    }
}

Client客户端调用

public class MyClass {
    public static void main(String[] args ){
        AbstractFactory factory=new SpecificFactory();
        AbstractProduct productOne=factory.Product(ProductOne.class);
        if (productOne!=null) {
            productOne.method();
        }
        AbstractProduct productTwo=factory.Product(ProductTwo.class);
        if (productTwo!=null){
            productTwo.method();
        }
 //       此处为原始传值区分生产那种产品(非空判断么、null pointer 多、你懂得、、)
//        AbstractFactory factroy=new SpecificFactory();
//        AbstractProduct productOne=factroy.Product("ProductOne");
//        if (productOne!=null){
//        productOne.method();
//        }
//        AbstractProduct productTwo=factroy.Product("ProductTwo");
//        if (productTwo!=null){
//            productTwo.method();
//        }

    }
}

注:注释部分为对比代码、

相关文章

  • 抽象工厂+反射

    抽象产品类 具体产品类 抽象工厂类 具体工厂类 Client客户端调用 注:注释部分为对比代码、

  • 设计模式 - 抽象工厂+反射

    有些代码是伪代码,运行不起来。 一、概述 抽象工厂:ProductA 和 ProductB 都是两个抽象的产品,之...

  • 工厂模式的优化--增加反射或配置文件

    参考:反射例子 内容 工厂模式 增加反射来提高灵活性 增加配置文件进一步优化 代码实现 实体类 基本的抽象工厂 增...

  • 第3章 创建型模式-抽象工厂模式

    ■ 抽象工厂模式的优点 ■ 抽象工厂模式的缺点 ■ 抽象工厂模式的使用场景 ■ 抽象工厂 AbstractFact...

  • 抽象工厂模式(选择产品簇)

    目录 回顾众多工厂模式 抽象工厂模式的理念 抽象工厂模式与工厂方法模式的差异 怎么来实现抽象工厂模式 抽象工厂模式...

  • 工厂方法模式

    工厂方法的核心是通过反射方式实例化具体产品类。举例说明:工厂生产电子设备产品 1:创建抽象工厂:电子产品都有一个开...

  • 【抽象工厂模式】Abstract Factory Design

    抽象工厂模式 抽象工厂模式是**Creational **模式之一 抽象工厂模式和工厂模式很相似,甚至可以说抽象工...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 设计模式(三)——抽象工厂模式

    抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。在抽象工厂中,接口是负责...

  • 工厂模式

    抽象工厂模式:抽象工厂,具体工厂,抽象产品,具体产品 形容词用接口,名词用抽象类 工厂方法就是只生成一种产品的抽象...

网友评论

      本文标题:抽象工厂+反射

      本文链接:https://www.haomeiwen.com/subject/cevgkxtx.html