公用技术——设计模式2,3,4——创建型模式——简单工厂,工厂方法,抽象工厂

1、概念

工厂模式”封装”了复杂的类体系结构,额外提供工厂类,返回类体系结构的核心对象,方便用户使用。这样用户就只需要了解核心对象,而不用去详细了解整个类体系结构,大大简化和方便了框架的调用。

工厂模式有三种,简单工厂,工厂方法模式,抽象工厂模式。本文中只介绍工厂方法模式,其他两种模式都是相似的。

在使用工厂模式时需要注意工厂类的唯一职责是创建核心对象,不应该被赋予更多的职责。

对于某些很容易理解的类结构,创建额外的工厂类反而会导致类结构变的复杂,例如Fruit下面有三个子类Apple,Banana,Watermelon。

2、UML图

3、代码

  额外提供工厂接口,以及对应的实现类。

3.1 工厂接口类

/**
 * 
 * @File Name: CoreObjectFactory.java 
 * @Description: 为了创建核心对象而提供的工厂类接口
 * @version 1.0
 * @since JDK 1.8
 */
public interface CoreObjectFactory {
	
	/**
	 * 
	 * @Title: createCoreObject
	 * @Description:创建核心对象
	 * @return
	 */
	CoreObject createCoreObject();
	
	/**
	 * @Title: createCoreObject
	 * @Description:创建核心对象,上述方法的重载
	 * @param props 核心对象需要的核心属性
	 * @return
	 */
	CoreObject createCoreObject(CoreProperty props);
}

 3.2 默认的工厂接口实现类

/**
* @File Name: DefaultCoreObjectFactory.java 
 * @Description: 工厂接口类的默认实现
 * @version 1.0
 * @since JDK 1.8
 */
public class DefaultCoreObjectFactory implements CoreObjectFactory {

	@Override
	public CoreObject createCoreObject() {
		// 写创建CoreObject的逻辑
		return null;
	}

	@Override
	public CoreObject createCoreObject(CoreProperty props) {
		// 编写创建CoreObject的逻辑
		return null;
	}
}

4、讨论

  问题1:简单工厂,工厂方法,抽象工厂三者有什么区别?

  答:工厂模式的主要职责都是创建对象,三者的区别体现在所创建对象的复杂度上。

  对于简单工厂模式,它所创建的对象较为简单,根据工厂方法的参数判断返回对象的类型。

  工厂方法模式,在类结构上做了升级,额外的创建了工厂接口和实现类,工厂接口中封装了创建对象的方法,实现类提供具体的实现细节,不同的实现类有着不同的实现方式和不同的子类。

  抽象工厂方法模式,它所创建的对象一般较为复杂,需要很多”零部件”,为每种”零部件”提供不同的工厂接口和实现类。例如日常生活中的电脑,显示器,芯片,键盘,鼠标等这些零部件都由不同的厂商提供。

  它的核心思想在于整体与局部的解耦,例如鼠标类型和电脑类型完全是独立的,你可以在华硕电脑上配置达尔优鼠标,雷蛇鼠标,也可以在联想电脑上配置。换一种鼠标类型对电脑没有影响,换一种电脑类型对鼠标也没有任何影响。

5、示例

  1. Mybatis框架中的SqlSessionFactory,返回核心的sqlSession对象
  2. Log4j或者是logback框架中的LoggerFactory,返回核心的Logger对象。尤其是Logger,基本上每天都在使用。
原文地址:https://www.cnblogs.com/rain144576/p/9940926.html