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;
        }    
    }
  • 相关阅读:
    ios arc __strong与__weak的一个小实例
    ObjectiveC block详解
    网站开发中JS中的常用语句
    js数组的操作
    sql常用语句
    复制myeclipse工程,注意事项
    JSP入门代码
    传智播客——struts2添加request/session/application属性
    WEB 开发前传——js笔记
    jdbc初步(转)
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/7471281.html
Copyright © 2011-2022 走看看