Java 反射之工厂模式
2017-05-01 11:11
246 查看
一.简单工厂模式
//接口 package Factory; public interface Fruit { public void eat(); //吃 }
//实现接口类 package Factory; public class Apple implements Fruit{ public Apple() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃苹果!"); } } package Factory; public class Banana implements Fruit{ public Banana() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃香蕉!"); } }
package Factory; public class Orange implements Fruit{ public Orange() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃橘子"); } }
//工厂类 package Factory; public class Factory { public Factory() { // TODO Auto-generated constructor stub } public static Fruit getInstance(String className){ if("apple".equals(className)) return new Apple(); //返回一个对象 if("banana".equals(className)) return new Banana(); if("orange".equals(className)) return new Orange(); return null; } }
//主方法 package Factory; import java.util.Scanner; public class FactoryTest { public FactoryTest() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); String className=scanner.nextLine();//输入想要创建对象的名字 Fruit f=Factory.getInstance( className); //调用并接收 f.eat(); } }
运行结果:
这个工厂类是最简单的工厂类,可以体会到工厂模式的设计思想,但是每次想添加一个类都需要更改大量的代码,所以后来演变了一个更方便使用的工厂模式,利用反射机制创建对象,从而减少对代码的修改。
如果想再添加一个葡萄类
package Factory;
public class Grape implements Fruit{
public Grape() { // TODO Auto-generated constructor stub } @Override public void eat() { // TODO Auto-generated method stub System.out.println("吃葡萄!"); }
}
//要在返回对象那多加一个创建葡萄类
package Factory; public class Factory { public Factory() { // TODO Auto-generated constructor stub } public static Fruit getInstance(String className){ if("apple".equals(className)) return new Apple(); if("banana".equals(className)) return new Banana(); if("orange".equals(className)) return new Orange(); if("grape".equals(className)) return new Grape(); //这里还要修改 return null; } }
运行结果:
这样对代码的修改量会增大,这只是一个简单的工厂模式,若果放到一个项目当中那修改的代码量远远比这个要多很多。
二.反射之工厂模式
//接口 package fanshe; public interface Fruit { public void eat(); //吃 }
//实现接口的类 package fanshe; public class Apple implements Fruit { pu c9c0 blic Apple() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃苹果~!"); } }
package fanshe; public class Banana implements Fruit{ public Banana() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃香蕉~!"); } }
package fanshe; public class Orange implements Fruit { public Orange() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃橘子~!"); } }
//工厂类 package fanshe; public class Factory { public Factory() { // TODO Auto-generated constructor stub } public static Fruit getInstance(String className) { /*if("orange".equals(className)) return new Orange(); return null;*/ Fruit fruit=null; try { fruit=(Fruit) Class.forName(className).newInstance();//创建对象 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return fruit; } }
//主方法 package fanshe; import java.util.Scanner; public class FactortDemo { public FactortDemo() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); String className=scanner.nextLine(); //输入想要创建类的名字 Fruit fruit=Factory.getInstance("fanshe."+className); fruit.eat(); } }
运行结果:
如果再想添加一个葡萄类直接添加类就可以了,不用再修改其他代码,减少了代码的修改量
package fanshe; public class Grape implements Fruit{ public Grape() { // TODO Auto-generated constructor stub } @Override public void eat() { // TODO Auto-generated method stub System.out.println("吃葡萄~!"); } }
运行结果:
相关文章推荐
- 结合属性文件的工厂模式(java反射的应用)
- java反射实现工厂模式
- Java中利用反射的思想解决工厂设计模式的耦合问题
- Java基础之反射及动态代理,反射实现工厂模式
- 模拟实现Struts拦截器-蕴含着代理模式,AOP,工厂模式,依赖注入,Java 反射,动态构造等机制
- java基础第九讲——反射、工厂设计模式、注解、线程、网络与线程的结合
- java 反射解析,将反射用于工厂模式【实例】
- Java学习笔记----工厂模式和反射
- Java—Generator模式,基于反射的工厂模式
- java:运用工厂模式+反射实现可插拔的程序
- java 枚举和反射 实现简单的工厂模式
- 15. JAVA 反射机制 Part 2(动态代理、类的生命周期、工厂设计模式) ----- 学习笔记
- Java工厂模式与反射机制、外部配置相结合
- Java设计模式之工厂模式之简单工厂模式(通过反射)
- java 设计模式之工厂模式与反射的结合
- java通过反射机制实现工厂设计模式
- [Java 15 反射机制 ] 工厂模式与 properties 读取配置文件
- Java 文件反射机制 工厂模式
- Java设计模式之工厂模式(利用反射实现)
- java内省机制与反射实现工厂模式