设计模式--工厂方法模式 (Factory Method)

  并不是能创建并返回一个新的对象的方法都是工厂方法模式的实例。
  工厂方法模式不仅要求有一个能够创建新对象的方法,还要求能够使得客户代码无需了解应该具体实例化哪个类。工厂方法模式通常会包含有若干个类,这些类实现了相同的操作,返回了相同的抽象类型,然而,这些类的操作在内部实际上实例化了不同的类,不过这些类都实现了上述抽象类型。
  工厂方法模式的特征:
1. 该方法创建了一个新的对象
2. 该方法的返回类型为一个抽象类或接口
3. 有若干个类实现了上述抽象类或接口。

  比如我们要实现一个在线客户服务系统,若客服人员在线的时候,客户提交的问题将会直接传送给客服人员;若客服人员不在线,则将客户提交的问题发送至客服信箱。
  类图:

工厂方法模式
工厂方法模式

    
  接口CustomerService中定义了一个抽象方法sendMessage(),类OnlineCustomerService和OffineCustomerService都实现了CustomerService接口,分别实现了客服人员在线和不在线时发送消息的方法。
  CustomerServiceFactory中提供了一个createCustomerService()方法,用过返回CustomerService类型的对象,在返回此对象之类,它会通过isServiceOnline()来检查客服人员是否在线,以返回不同的对象。

  下面是工厂类的代码:

public class CustomerServiceFacotry {
	private static boolean isServiceOnline() {
		// 检查客服人员状态
		// 若在线,返回true;不在线,返回false
		return false;
	}
 
	public static CustomerService createCustomerService() {
		if (isServiceOnline()) {
			return new OnlineCustomerService();
		} else {
			return new OfflineCustomerService();
		}
	}
}

发表评论

邮箱地址不会被公开。 必填项已用*标注