Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现。这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作。
假设有一个水果工厂,工厂可以生产香蕉,生产苹果,就可以写成如下代码:
FruitInterface.java
package com.muggle.project; //水果接口 public interface FruitInterface { public void produce(); }
下面是要生产的香蕉类和苹果类:
Banana.java
package com.muggle.project; //生产一个香蕉 public class Banana implements FruitInterface { @Override public void produce(){ // TODO Auto-generated method stub System.out.println("--------生产了一个香蕉-------"); } }
Apple.java
package com.muggle.project; public class Apple implements FruitInterface { @Override public void produce() { // TODO Auto-generated method stub System.out.println("--------生产了一个苹果-------"); } }
再定义一个水果工厂类
FruitInterface.java
package com.muggle.project; //水果工厂 public class FruitFactory { public FruitInterface getFruit(String key) { if("Banana".equals(key)) { return new Banana(); } else if ("Apple".equals(key)) { return new Apple(); } else { return null; } } }
最后就可以通过水果工厂生产香蕉和苹果了
TestDrive.java
package com.muggle.project; public class TestDrive { public static void main(String[] args) { // TODO Auto-generated method stub /* 不用工厂模式的原始方法 */ // FruitInterface banana=new Banana(); // banana.produce(); // FruitInterface apple=new Apple(); // apple.produce(); FruitFactory factory =new FruitFactory(); FruitInterface banana=factory.getFruit("Banana"); banana.produce(); } }
结果如下所示,通过这种方法就能实现一个简单的工厂,但是也有一个弊端:就是新加类的时候需要一直else if,下面就介绍一种反射的方法来实现更好的工厂模式。下图是运行结果