并不是能创建并返回一个新的对象的方法都是工厂方法模式的实例。
工厂方法模式不仅要求有一个能够创建新对象的方法,还要求能够使得客户代码无需了解应该具体实例化哪个类。工厂方法模式通常会包含有若干个类,这些类实现了相同的操作,返回了相同的抽象类型,然而,这些类的操作在内部实际上实例化了不同的类,不过这些类都实现了上述抽象类型。
工厂方法模式的特征:
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(); } } } |