设计模式笔记——工厂模式

工厂模式是最常用的设计模式~~虽然网上是这么说,实际上是不是不知道,只是在平时开发时确实又看到过,比如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();
		
	}

结果:

设计模式笔记——工厂模式_第1张图片



你可能感兴趣的:(设计模式,工厂模式)