工厂模式是最常用的设计模式~~虽然网上是这么说,实际上是不是不知道,只是在平时开发时确实又看到过,比如android开发里引用三方的库AchartEngine,里面初始化一个自定义内容的渲染器类后,将其作为参数传给Factory类的静态方法就可以返回一个折现图,或者柱状图等等。
这种模式下,使用者并不需要关心其工厂内部是如何生产其产品类,只需要明确产品的类别和指定其某些属性就可以让工厂生产出来,当需要增加产品的类别时,只需要在工厂内扩展就可以了。However,工厂模式也有缺点,比如若扩展一个产品,那么就会增加系统的复杂性,一个工厂就会越来越庞大。当需要实现一个简单的产品时,往往自己动手就可以了,用了工厂模式反而造成牛刀小试的效果,也浪费资源。
在代码中其实也很好理解,这里通过水果例子来说明:
首先,创建一个接口,该接口提供了水果类的信息显示功能。
public interface Fruit { void printInfo(); }
然后,创建一些具体的产品,这些产品都属于水果类,需要实现水果类的信息显示功能:
public class Apple implements Fruit{ @Override public void printInfo() { // TODO Auto-generated method stub System.out.println("苹果"); } }
public class Banana implements Fruit{ @Override public void printInfo() { // TODO Auto-generated method stub System.out.println("香蕉"); } }
public class Orange implements Fruit{ @Override public void printInfo() { // TODO Auto-generated method stub System.out.println("橙子"); } }
public class FruitFactory { public static final int APPLE=1; public static final int BANANA=2; public static final int ORANGE=3; public Fruit getFruit(int fruitType){ if(fruitType==APPLE){ return new Apple(); } if(fruitType==BANANA){ return new Banana(); } if(fruitType==ORANGE){ return new Orange(); } return null; } }
public static void main(String[] args) { // TODO Auto-generated method stub FruitFactory fruit=new FruitFactory(); Fruit apple=fruit.getFruit(FruitFactory.APPLE); apple.printInfo(); Fruit banana=fruit.getFruit(FruitFactory.BANANA); banana.printInfo(); Fruit orange=fruit.getFruit(FruitFactory.ORANGE); orange.printInfo(); }