工厂方法经常用在以下两种情况中:第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。工厂方法的结构:
图1工厂方法的结构具体例子:这是一个简单的例子,来自《深入浅出设计模式》
图2工厂方法UML图在这里Creator就是MobileFactory,工厂方法就是productMobile(),Concrete Creator 就是NokiaFactory,MotorolaFactory,抽象产品是Mobile,具体产品是Motorola和Nokia,每个具体产品都实现了抽象方法call(),客户端创建一个具体工厂,调用工厂方法便可以生产一种Mobile,客户端最需要的最终产品便被创建了。MobileFactory的源代码:package factoryMethod;public interface MobileFactory{public Mobile produceMobile();}Mobile的源代码:package factoryMethod;publicinterface Mobile{publicvoid call();}MotorolaFactory的源代码:package factoryMethod;public class MotorolaFactory implements MobileFactory{public Mobile produceMobile(){return new Motorola();}}Nokia的源代码:package factoryMethod;public class Nokia implements Mobile{public void call(){System.out.println("Nokia producted");}}Client的源代码:package factoryMethod;public class Client{public static void main(String[] args){MobileFactory mbf = new NokiaFactory();Mobile mb=mbf.produceMobile();mb.call();mbf= new MotorolaFactory();mb=mbf.produceMobile();mb.call();}}使用场合:当一个类不知道它所必须创建对象的类或一个类希望由子类来指定它所创建的对象时,可以使用工厂方法。
Java设计模式之工厂方法模式
最新推荐文章于 2024-04-19 14:53:35 发布