zoukankan      html  css  js  c++  java
  • 反射与工厂设计模式

    /*
    工厂设计模式的一般格式:接口+实现对应接口的子类+工厂类
        通过反射技术改进的工厂,不再使用new关键字来实例化对象了
    */
    package com.reflect.factory.model;
    
    interface IFruit {
        public abstract void eat();
    }
    class Apple implements IFruit{
        @Override
        public void eat() {
           System.out.println("【Apple】吃苹果");
        }
    }
    
    class Factory {
        private Factory(){}
        public static  IFruit getInstance(String className){        
            IFruit fruit = null; 
            try {
                             //获取到Class类对象
                Class<?> clazz = Class.forName(className);
                            //通过Class对象实例化对象,但不再用new关键字
                fruit=(IFruit)clazz.newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            } 
            return fruit;
        }    
    }
    public class TestDemo {
        public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException {
              IFruit fruit = Factory.getInstance("com.reflect.factory.model.Apple");
              fruit.eat();
        }
    }
    /*
       上面这个工厂类存在一个缺陷,目前只能产生IFruit的实例化对象,
       如果需要生成其它类的实例化对象,就需要重新创建一个工厂
    
       如何解决这个问题呢?
          我们可以使用泛型来解决这个缺陷:
          改进版工厂类如下:
    */
    class Factory {
        private Factory(){}
        public static <T> T getInstance(String className){
            T obj = null; 
            try {
                Class<?> clazz = Class.forName(className);
                obj=(T)clazz.newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            } 
            return obj;
        }    
    }
  • 相关阅读:
    浮动清除
    解剖JavaScript中的null和undefined【转】
    关于innerHTML以及html2dom
    javascript 作用域
    4390. 【GDOI2016模拟3.16】图计数 (Standard IO)
    5049. 【GDOI2017模拟一试4.11】腐女的生日
    4273_NOIP2015模拟10.28B组_圣章-精灵使的魔法语
    jzoj_5631_(NOI2018模拟4.5)_A
    jzoj_1001_最难的问题_Floyd
    jzoj_3385_黑魔法师之门
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/7471281.html
Copyright © 2011-2022 走看看