通过反射优化工厂模式
来源:互联网 发布:nba2017球员数据 编辑:程序博客网 时间:2024/05/17 23:23
1.工厂模式
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=newA() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
具体内容见另一篇博客
2.不足
当增加一个子类的时候需要修改工厂类,这样很麻烦
3.利用反射改进
思路:工厂类通过反新的子类的路径,并使用getInstace()方法来获取一个类的实例。
实现
package com.learn.controller;public class Factory { public static void main(String[] as) throws IllegalAccessException, InstantiationException, ClassNotFoundException { man m = reflectFactory.getInstance("com.learn.controller.Chinese"); System.out.println(m.sayHello()); }}interface man { String sayHello();}class Chinese implements man { public String sayHello() { return "nihao"; }}class Waiguoren implements man { public String sayHello() { return "hello"; }}class reflectFactory{ public static man getInstance(String mantype) throws ClassNotFoundException, IllegalAccessException, InstantiationException { man man = null; man = (man) Class.forName(mantype).newInstance(); return man; }}
运行结构如下:
nihao
4.结合属性文件优化
思路: 把所有类的完整路径都写到文件里然后读文件传入工厂类中去只想say()函数
实现:
先假装读到了配置文件保存在了一个数组中,就是下面的mans数组
public class Factory { static String[] mans = new String[]{ "com.learn.controller.Chinese", "com.learn.controller.Waiguoren" }; public static void main(String[] as) throws IllegalAccessException, InstantiationException, ClassNotFoundException { man m = reflectFactory.getInstance(mans[0]); System.out.println(m.sayHello()); }}
运行结果:
你猜【尴尬脸】
5.结合注解优化
待更新
0 0
- 通过反射优化工厂模式
- vb.net 中通过反射实现简单工厂模式
- vb.net 中通过反射实现简单工厂模式
- Java设计模式之工厂模式之简单工厂模式(通过反射)
- 反射工厂模式
- 工厂模式 + 反射改进
- 工厂模式与反射
- 抽象工厂模式+反射
- 反射工厂模式
- 工厂模式中的反射
- 简单工厂模式+反射
- 反射--工厂设计模式
- 利用反射实现工厂模式.
- .Net反射工厂设计模式
- 策略模式+简单工厂+反射
- 将反射用于工厂模式
- 简单工厂模式与反射
- java反射实现工厂模式
- 绪论
- 页面程序获取浏览器url的方法
- 跟着钱钟书和杨绛去春游
- redis之数据安全与性能保障详解
- Java内存访问重排序的研究
- 通过反射优化工厂模式
- javacv开发详解之1:调用本机摄像头视频(建议使用javaCV1.3版本)
- 了解 ArrayList 源码(二)
- 驱动调试之段错误分析_根据栈信息确定函数调用过程
- hdu 1788Chinese remainder theorem again(中国剩余定理or同余性质的应用)
- Ubuntu下安装和配置KVM
- 最简单的github搭建个人网站及访问html文件
- 116. Populating Next Right Pointers in Each Node
- 成绩录入系统