16---java反射机制06(工厂设计模式)

 

工厂设计模式:最大的有点就是解耦合;
  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 Demo{
   public static void main(String args[]){
     Fruit f=Factory.getInstance("apple");
     if(f!=null){
       f.eat();
      }
      
    }
   }
此时扩充子类,就得修改工厂;如果想扩充子类同时不用修改工厂类的话,则必须使用反射完成;

   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){
      }
     return fruit;
    }
   }
  public class Demo{
   public static void main(String args[]){
     Fruit f=Factory.getInstance("Apple");//“包.类”名称
     if(f!=null){
       f.eat();
      }
      
    }
   }
 上面实现了扩充子类不用修改工厂,但是也存在一些问题,就是用户必须输入完整的包点类名称;
 这样很麻烦,此时可以通过配置文件的方式保存这些完整的类路径---属性文件;
  程序运行的时候,就可以将属性文件的内容读取出来,之后直接操作属性文件的key,就
  避免了输入过多的类路径了;
  

你可能感兴趣的:(16---java反射机制06(工厂设计模式))