工厂方法模式是对简单工厂模式进一步的解耦,因为在工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。
优点:工厂方法模式克服了简单工厂会违背开-闭原则的缺点,又保持了封装对象创建过程;
缺点:每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量。
public double getResult(double numberA,double numberB) throws Exception;
public class Add implements Operation{
public double getResult(double numberA, double numberB) throws Exception {
public class Sub implements Operation{
public double getResult(double numberA, double numberB) throws Exception {
public Operation createOperation();
public class AddFactory implements Factory{
public Operation createOperation() {
public class SubFactory implements Factory{
public Operation createOperation() {
public static void main(String[] args) throws Exception {
// 使用反射机制实例化工厂对象,因为字符串是可以通过变量改变的
Factory addFactory = (Factory) Class.forName("demo6.AddFactory").newInstance();
Factory subFactory=(Factory) Class.forName("demo6.SubFactory").newInstance();
Operation add = addFactory.createOperation();
Operation sub = subFactory.createOperation();
System.out.println(add.getResult(1, 1));