java设计模式- Factory Method(工厂方法)模式
程序员文章站
2022-07-12 18:33:30
...
Factory Method定义
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际工作推迟到子类中
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。下面是工厂方法模式的缩略类图:
在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做。这个核心工厂则变为抽象工厂角色,仅负责给出具工厂子类必须实现的接口,而不接触哪一产品创建的细节。
这种抽象的结果,使这种工厂方法模式可以用来允许系统不修改具体工厂角色的情况下引进新产品,这一特点无疑使得工厂模式具有超过简单工厂模式的优越性。
一般结构如下:
和抽象工厂模式不同的是,工厂方法中每个工厂对应的一个具体的产品类,比如A类门工厂,只会产生A类门,而在抽象工厂中,每个工厂生产的是一个产品系,比如工程A(上篇中的车间A),既生产车门,又生产车轮。个人认为抽象工厂模式是工厂方法模式的一个补充,每个工厂可以生产一系列的产品
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际工作推迟到子类中
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。下面是工厂方法模式的缩略类图:
在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做。这个核心工厂则变为抽象工厂角色,仅负责给出具工厂子类必须实现的接口,而不接触哪一产品创建的细节。
这种抽象的结果,使这种工厂方法模式可以用来允许系统不修改具体工厂角色的情况下引进新产品,这一特点无疑使得工厂模式具有超过简单工厂模式的优越性。
一般结构如下:
和抽象工厂模式不同的是,工厂方法中每个工厂对应的一个具体的产品类,比如A类门工厂,只会产生A类门,而在抽象工厂中,每个工厂生产的是一个产品系,比如工程A(上篇中的车间A),既生产车门,又生产车轮。个人认为抽象工厂模式是工厂方法模式的一个补充,每个工厂可以生产一系列的产品
package factoryMethod; public interface Door { }
package factoryMethod; public class DoorA implements Door { public DoorA() { System.out.println("制造了一个DoorA"); // TODO Auto-generated constructor stub } }
package factoryMethod; public class DoorB implements Door { public DoorB() { System.out.println("制造了一个DoorB"); // TODO Auto-generated constructor stub } }
package factoryMethod; /* * A类门工厂 */ public class DoorAFactory implements DoorFactory { public Door factory() { return new DoorA(); } }
package factoryMethod; /* * B类门工厂 */ public class DoorBFactory implements DoorFactory { public Door factory() { // TODO Auto-generated method stub return new DoorB(); } }
package factoryMethod; /* * 工厂接口 */ public interface DoorFactory { public Door factory(); }
package factoryMethod; public class Test { public static void main(String[] args) { DoorFactory a = new DoorAFactory(); DoorFactory b = new DoorBFactory(); a.factory(); b.factory(); } }