您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第15章:Java反射机制】_工厂设计模式
发布时间:2021-01-07 18:13:12编辑:雪饮阅读()
一个简单的工厂设计模式
package org.kasumi;
interface Fruit{
public void eat();
}
class Apple implements Fruit{
public void eat(){
System.out.println("苹果");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("橙子");
}
}
class Factory{
public static Fruit getInstance(String className){
Fruit fruit=null;
if("apple".equals(className)){
fruit=new Apple();
}
if("orange".equals(className)){
fruit=new Orange();
}
return fruit;
}
}
public class Hello{
public static void main(String args[]){
Fruit f=Factory.getInstance("apple");
if(f!=null){
f.eat();
}
}
};
缺点:这种工厂设计模式,如果要有新的类型需要工厂类来生产其实例,则需要重新修改下工厂类
用反射实现工厂设计模式
package org.kasumi;
interface Fruit{
public void eat();
}
class Apple implements Fruit{
public void eat(){
System.out.println("苹果");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("橙子");
}
}
class Factory{
public static Fruit getInstance(String className){
Fruit fruit = null ;
try{
fruit = (Fruit)Class.forName(className).newInstance() ;
}catch(Exception e){
e.printStackTrace() ;
}
return fruit ;
}
}
public class Hello{
public static void main(String args[]){
Fruit f = Factory.getInstance("org.kasumi.Apple") ;
if(f!=null){
f.eat() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
苹果
利用反射实现的工厂设计模式,若有新类则工厂类无需变动代码
不足:有新类时候要在调用处修改新类的以包为基的路径指向,若能直接做成配置文件就更好了。
用配置文件决定工厂模式工厂类的对象实例生产
package org.kasumi;
import java.util.Properties ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.io.FileInputStream ;
interface Fruit{
public void eat();
}
class Apple implements Fruit{
public void eat(){
System.out.println("苹果");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("橙子");
}
}
class Init{
public static Properties getPro(){
Properties pro = new Properties() ;
File f = new File("d:\\fruit.properties") ; // 找到属性文件
try{
if(f.exists()){ // 文件存在
pro.load(new FileInputStream(f)) ; // 读取属性
}else{
pro.setProperty("apple","org.kasumi.Apple") ;
pro.setProperty("orange","org.kasumi.Orange") ;
pro.store(new FileOutputStream(f),"FRUIT CLASS") ;
}
}catch(Exception e){}
return pro ;
}
};
class Factory{
public static Fruit getInstance(String className){
Fruit fruit = null ;
try{
fruit = (Fruit)Class.forName(className).newInstance() ;
}catch(Exception e){
e.printStackTrace() ;
}
return fruit ;
}
}
public class Hello{
public static void main(String args[]){
Properties pro = Init.getPro() ;
Fruit f = Factory.getInstance(pro.getProperty("apple")) ;
if(f!=null){
f.eat() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
苹果
关键字词:java,工厂设计模式