简单工厂模式(Simple Factory Pattern):定义一个工厂类,它能够根据参数的不一样返回不一样类的实例,被建立的实例一般都具备共同的父类。java
由于在简单工厂模式用于建立实例的方法是静态的方法,所以简单工厂模式又被称为静态工厂方法模式,它属于类建立型模式。设计模式
尽管简单工厂模式不属于GoF23种设计模式之一,可是实际中用途普遍,而且能够做为学习“工厂方法模式”以及“抽象工厂模式”的基础。ide
由图可知包含如下三个角色:学习
某公司须要开发一个图表库,该图表库能够提供各类不一样外观的图表,例如柱状图,折线图等等。测试
首先能够先设计一个抽象图表类(这里是一个接口):优化
interface Chart { void display(); }
接着各类具体产品类(柱状图,折线图,饼状图等)实现该接口便可:设计
class HistogramChart implements Chart { public HistogramChart() { System.out.println("建立柱状图"); } public void display() { System.out.println("显示柱状图"); } } class PieChart implements Chart { public PieChart() { System.out.println("建立饼状图"); } public void display() { System.out.println("显示饼状图"); } } class LineChart implements Chart { public LineChart() { System.out.println("建立折线图"); } public void display() { System.out.println("显示折线图"); } }
最后是工厂类,为了方便加上了枚举参数:code
class Factory { public static Chart getChart(Charts charts) { switch(charts) { case PIE_CHART: return new PieChart(); case LINE_CHART: return new LineChart(); case HISTOGRAM_CHART: return new HistogramChart(); default: return null; } } } enum Charts { PIE_CHART,LINE_CHART,HISTOGRAM_CHART; }
测试:xml
public static void main(String[] args) { Chart chart = Factory.getChart(Charts.LINE_CHART); chart.display(); }
为了简化简单工厂模式,能够将抽象产品类与工厂类合并,将静态方法移至抽象产品类中:对象
这样能够经过抽象产品类的静态方法获取子类对象,优化代码以下:
interface Chart { void display(); static Chart getChart(Charts charts) { switch(charts) { case PIE_CHART: return new PieChart(); case LINE_CHART: return new LineChart(); case HISTOGRAM_CHART: return new HistogramChart(); default: return null; } } }
简单工厂模式的主要优势以下:
简单工厂模式的主要缺点以下: