工厂模式四

demo4

用properties保存了全部子类信息,通过代码进行操作

Code
class Factory {
    
public static Fruit getFruitInstance(String type) {
        Fruit f 
= null;

            
//通过Class类来完成 通过包名和类名来实例化这个类
        
//这个方法返回的是object需要一个转型
        try {
            f
=(Fruit)Class.forName(type).newInstance();
        } 
catch (Exception e) {
            
            e.printStackTrace();
        }
        
return f;
    }
}
//定义一个类来完成从键盘可以输入
class InputData{
    BufferedReader buf
=null;

    
public InputData() {
        buf
=new BufferedReader(new InputStreamReader(System.in));
    }
    
public String getString(){
        String str 
= null ;
        
try
        {
            str 
= buf.readLine() ;
        }
        
catch (Exception e)
        {
        }
        
return str ;
    }
    
}
public class factoryDemo4 {
    
public static void main(String args[]) {
        
// 以下是以前紧密耦合的工厂使用方法,子类与父类紧紧结合
        /**
         * Fruit f=new Apple(); f.grow(); f.pick();
         
*/
        
// //////////////////////////////
        /**
         * //下面用上面的类Factory来实现 Fruit f=Factory.getFruitInstance(); f.grow();
         * f.pick(); /////////////////////////////
         
*/
        
/**
        // demo2 中对其进行修改
        if (args.length == 0) {
            System.out.println("请输入要使用的类名称:");
            System.exit(1);
        }

        Fruit f = Factory.getFruitInstance(args[0]);
        if (f != null) {
            f.grow();
            f.pick();
        } else {
            System.out.println("没有发现这个类型。");
        }
           
*/
        
//以下是对3的修改
        Properties p = new Properties() ;
        p.setProperty(
"a","com.miao.factoryDeom4.Apple");
        p.setProperty(
"b","com.miao.factoryDeom4.Orange");
        
//告诉用户的代码与类的映射
        System.out.println(p) ;
        
// 加入一个可以从键盘输入数据的类
        System.out.print("输入要使用的子类代码:") ;
        String code 
= new InputData().getString() ;
        System.out.println(p.getProperty(code)) ;
        Fruit f 
= Factory.getFruitInstance(p.getProperty(code)) ;
        
if(f!=null)
        {
            f.grow() ;
            f.pick() ;
        }
        
else
        {
            System.out.println(
"没有发现这个类型。") ;
        }
    }
}

posted @ 2009-03-12 20:34  xiaomiao  阅读(171)  评论(0编辑  收藏  举报