设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

工厂模式

2016-04-04 16:43:17.0 java  
导读:简要叙述几种工厂模式。。。

工厂模式分为三种:

  1. 简单工厂模式
  2. 工厂方法模式
  3. 抽象工厂模式

这里简单表示下三种工厂模式的UML图,不再详细说明三种工厂模式的具体细节。

1.1 普通模式(没有使用工厂模式):

客户端对接口以及对应的实现类都具有依赖。如果扩展要修改客户端代码。违反开闭原则。

1.2 简单工厂模式(静态工厂模式):


工厂代码:

public class CarFactory
{
	public static Car creatCar(String name)
	{
		Car car = null;
		if("奥迪".equals(name))
		{
			car = new Audi();
		}else if ("比亚迪".equals(name))
		{
			car = new Byd();
		}
		return car;
	}
}
或者

public class CarFactory
{
	public static Car creatAudi()
	{
		return new Audi();
	}
	
	public static Car creatByd()
	{
		return new Byd();
	}
}
客户端对接口以及工厂方法有依赖

很明显无论是上述的哪种工厂,当新增一种车型时,都必须对工厂类进行修改,不符合开闭原则。

1.3 工厂方法模式

工厂方法模式的特点:

  1. 为了符合开闭原则。
  2. 简单工厂模式只有一个工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

当新增一种车型时,需要增加这种车型的实体类以及这种车型的Factory,符合了开闭原则。由于要符合开闭原则,实体类和工厂类的数量大幅度提高。客户端的依赖也变多。下面对工厂方法模式与简单工厂模式进行对比:

  • 结构复杂度:

    从这个角度比较,显然简单工厂模式要占优,简单工厂模式只有一个工厂类,而工厂方法模式的工厂类随着产品的增加而增加,这使类越来越多,从而增加了结构复杂度。

  • 代码复杂度:

    简单工厂模式的工厂类随着产品的增加需要增加,而工厂方法模式每个具体工厂类只负责单一的任务,工厂方法模式代码更简洁。

  • 客户端编程复杂度

    工厂方法模式虽然符合开闭原则,但是在客户端编码中需要对各种工厂类进行实例化,而简单工厂模式只有一个静态的工厂类,在客户端无需实例化,简单工厂模式客户端编程复杂度更低

  • 管理上的难度

    工厂方法模式完全符合开闭原则,有很好的扩展性,但是需要增加许多类。虽然简单工厂模式没有符合开闭原则,但是也只是需要增加一个实体类,然后在工厂类中修改少量代码即可。在这点上看来,其实简单工厂模式更加容易管理

根据设计理论来选择:工厂方法模式,但是我们平时简单工厂模式用得更多。

1.4 抽象工厂模式:

特点:

用来生产不同产品族的全部产品(对于增加新的产品无能为力,支持增加产品族)。



三种工厂模式要点:

  • 简单工厂模式(静态工厂模式):虽然不符合开闭原则,但是最常用。
  • 工厂方法模式:不修改已有类的情况下,通过增加新的工厂类来实现扩展,符合开闭原则。
  • 抽象工厂模式:不可以增加新的产品,可以增加产品族。

参考资料:

  1. http://blog.csdn.net/zhengzhb/article/details/7359385


(编辑: Hosee)

网友评论
相关文章