工厂方法模式

工厂方法模式概述

有一个抽象类(接口),负责抽象出某个产品线(类),每多出一个产品,则继承该产品线(类或实现接口),创建一个新的类,由此每次多出一个产品的时候,无需操作原有类的内容,只需要新建一个类继承原产品线(实现接口)即可。

以下我们仍然以一个简单的计算器作为例子

定义每个运算逻辑

//运算方法接口
public interface Operator {
	public int getResult(int number1, int number2);
}

//各个运算方法类
//加法
public class Addition implements Operator{
	public int getResult(int number1, int number2) {
		return number1 + number2;
	}
}

//减法
public class Subtraction implements Operator{
	public int getResult(int number1, int number2) {
		return number1 - number2;
	}
}

//乘法
public class Multiplication implements Operator {
	public int getResult(int number1, int number2) {
		return number1 * number2;
	}
}

//除法
public class Divition implements Operator {
	public int getResult(int number1, int number2) {
		return number1 / number2;
	}
}

工厂类

//负责操作的工厂接口 也视为一个 产品线
public interface IFactory {
	public Operator CreateOperation();
}
//加法工厂
public class AddFactory implements IFactory {
	public Operator CreateOperation() {
		return new Addition();
	}
}
//减法工厂
public class SubFactory implements IFactory {
	public Operator CreateOperation() {
		return new Subtraction();
	}
}
//乘法工厂
public class MultiFactory implements IFactory {
    public Operator CreateOperation() {
		return new Multiplication();
	}
}
//除法工厂
public class DivitFactory implements IFactory {
    public Operator CreateOperation() {
		return new Divition();
	}
}
//测试函数
public class TestMain {
	public static void main(String[] args) {
        //由当前调用的客户端来决定实例化哪个工厂的运算类
	    IFactory methodfactory = new MultiFactory();
		Operator operator = methodfactory.CreateOperation();
		System.out.println(operator.getResult(2, 3));
	}
}

总结

简单工厂模式对比:
        简单工厂模式的优点是将必要的判断交由工厂类进行,客户端避免了对具体产品的依赖;缺点是每次新增一个新的产品时需要改工厂类的源码,违背了开闭原则
        工厂方法模式实现时,需要由客户端通过实例化指定工厂来决定实现指定运算类,工厂方法简单工厂的内部逻辑判断移到了客户端进行,当有新产品出现时也只需要继承父类(接口)编写新类即可。

才疏学浅,如文中有错误,感谢大家指出。 

原文地址:https://www.cnblogs.com/runningRookie/p/11108776.html