简单工厂模式(Simple Factory Pattern)

概念

定义一个工厂类,它可以根据参数的不用返回不同类的实例,被创建的实例通常都具有共同的父类。由于简单工厂模式中用于创建实例的方法通常是静态的,因此又称为静态工厂方法模式。

实例

其实简单工厂模式对于普通开发者使用频率还是很高的,也很容易理解。
场景:

统计数据业务中,我们通常会需要使用到不同类型的图表去直观的展示数据,我们完全可以通过不同的参数生成不同的图标,如柱状图、折线图、饼状图等等。此场景下,我们完全使用简单工厂模式,对其进行简单的设计。

首先我们需要定义一个抽象图表接口,这里我们基于Java进行设计

public interface Chart{
	public void display();
}

接下来,我们需要帮不同类型的图表接口实现

  1. 柱状图 HistogramChart
public class HistogramChart implements Chart {
	public HistogramChart() {
		System.out.println("柱状图创建");
	}
	public void display() {
		System.out.println("显示柱状图");
	}
}
  1. 折线图 LIneChart
public class LineChart implements Chart {
	public LineChart() {
		System.out.println("折线图创建");
	}
	public void display() {
		System.out.println("显示折线图");
	}
}
  1. 饼状图 PieChart
public class PieChart implements Chart {
	public PieChart() {
		System.out.println("饼状图创建");
	}
	public void display() {
		System.out.println("显示饼状图");
	}
}

最后,我们需要一个工厂,通过不同的参数传入,创建不同的图表对象

public class ChartFactory {
	public static Chart getChart(String type){
		Chart chart = null;
		if (type.equalsIgnoreCase("histogram")) {
			chart = new HistogramChart();
		}else if (type.equalsIgnoreCase("line")) {
			chart = new LineChart();
		}else if (type.equalsIgnoreCase("pie")) {
			chart = new PieChart();
		}
		return chart;
	}
}

客户端调用

public class Client {
	public static void main(String args[]) {
		Chart chart;
		chart = ChartFactory.getChart("histogram");
		//chart = ChartFactory.getChart("line");
		//chart = ChartFactory.getChart("pie");
		chart.display();
	}
}

以上就是简单工厂方法的实际应用实例。我们不难发现,对于简单工厂模式,它们的结构模式包括:

  1. 抽象产品角色(Product),它是工厂类创建的所有对象的父类,封装了各种产品对象的公有方法,可以提高系统的灵活性,如上面例子中的Chart。
  2. 具体产品角色(ConcreteProduct),是抽象产品角色的具体实现,如上例中的HistogramChart、LineChart、PieChart。
  3. 工厂角色(Factory),负责实现创建所有产品实例的内部逻辑,返回类型为抽象产品角色。如上例中的ChartFactory 。

缺点

其实对于我们日常使用过程中,我们需要根据自身实际业务选择对应的设计模式,每一种设计模式都拥有自己的优缺点,对于简单工厂模式的缺点有一下几点需要注意

  1. 工厂类中拥有所有产品的实现都创建逻辑,如果出现问题,那么将影响整个系统。
  2. 过于复杂的业务,会增加系统中类的个数,如果引入过多,会增加负责度和理解难度。
  3. 当业务复杂度逐渐增大,很大可能会对原有的工厂进行逻辑调整,扩展性比较差。
  4. 由于简单工厂模式的特点——静态方法,导致工厂角色无法形成继承的等级结构。

适用环境

  1. 业务复杂度低,需要通过工厂创建的对象比较少。

一问三不知

  1. 关于简单工厂模式,以下不正确的解释是()。
    A. 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类
    B. 简单工厂模式可以根据参数的不同返回不同的产品类的实例
    C. 系统的扩展性困难,在添加新的产品时需要修改工厂的业务逻辑
    D. 简单工厂模式可以减少系统中类的个数,简化系统的设计,让系统更易于理解

答案将在下一篇公布…*

下一篇:工厂方法模式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值