工厂模式的介绍、优缺点

二、工厂模式

1.介绍

      在上一节中介绍了“简单工厂模式”,现在来介绍下“工厂模式”,在“工厂模式”和“简单工厂模式”中,最主要,最明显的区别之一是“工厂模式”下可以设立多个子工厂,而不是所有的产品有单一的工厂来生产,而是给各自特色的子工厂来生产。

2.例子

      我们还是继续使用“计算器”来作为例子吧。由于在产品Product的结构模式变化不大,所以就不在载入(详情看“简单工厂模式”的随笔),主要载入“工厂模式”的代码

a.父工厂接口(IFactory接口)

import SimpleFactory.Operation;

public interface IFactory {

	public Operation createOperation();
}

b.子工厂(加法工厂,减法工厂,乘法工厂,除法工厂)

import SimpleFactory.Operation;
import SimpleFactory.OperationAdd;
import SimpleFactory.OperationSub;
import SimpleFactory.OperationMul;
import SimpleFactory.OperationDiv;


public class AddFactory implements IFactory{

	public Operation createOperation() {
		// TODO Auto-generated method stub
		return new OperationAdd();
	}
}

public class SubFactory implements IFactory{

	@Override
	public Operation createOperation() {
		// TODO Auto-generated method stub
		return new OperationSub();
	}

}

public class MulFactory implements IFactory{

	@Override
	public Operation createOperation() {
		// TODO Auto-generated method stub
		return new OperationMul();
	}

}

public class DivFactory implements IFactory{

	@Override
	public Operation createOperation() {
		// TODO Auto-generated method stub
		return new OperationDiv();
	}

}

c.客户端

import SimpleFactory.Operation;

public class Client {
    
    public static void main(String[] args) {
    
        IFactory operFactory = new AddFactory();
        Operation oper = operFactory.createOperation();
        oper.set_numberA(1);
        oper.set_numberB(2);
        double result = oper.getResult();
        System.out.println(result);
    }
}

d.UML图(例子是从《大话设计模式》中借鉴而来的,这是一本很不错的书)

3.评价:

a.在客户端Client中可以将工厂模式的主要结构看着很清楚,首先我们要有IFactory这个工厂的父接口,所有的子类或者子接口都可以实现它。AddFactory则是子类的代表之一,所以利用java的多态来实现,降低代码的耦合性。而同时每个子工厂中拥有每条生产独特产品的生产线。由此,工厂和产品挂上钩了,联系上了。每个子工厂生产出来的都是独特的产品。

b.比“简单工厂模式”的优缺点

优点:克服了简单工厂违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点,降低客户端和工厂的耦合性,所以说“工厂模式”是“简单工厂模式”的进一步抽象和推广。

缺点:每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。

原文地址:https://www.cnblogs.com/kgrdomore/p/4242081.html