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

抽象工厂+反射

作者: 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();
    //        }
    
        }
    }
    

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

    相关文章

      网友评论

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

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