设计模式之创建型--工厂模式

工厂模式
	实现了创建者和调用者的分离
	分类
		简单工厂模式
		    用来生成同一等级结构中的任意产品(对于增加新的产品,需要修改已有的代码)
		工厂方法模式
		    用来生成同一等级结构中的固定产品(支持增加任意产品)
		抽象工厂模式
		     用来生成不同产品族的全部产品(对于增加新的产品,无能为力,支持增加产品族)
面向对象设计的基本原则
	OCP开闭原则:一个软件的试题应当对扩展开放,对修改关闭
	DIP依赖倒转原则:要针对接口编程,不要针对实现编程
	LOD迪米特法则:至于你直接的朋友通信,而避免和陌生人通信

核心本质是
	实例化对象,用工厂方法代替new操作
	将选择实现类。创建爱你对象统一管理和控制,从而将调用者跟我们的
	实现类解耦

简单工厂模式:
	要点:简单工厂模式也叫静态工厂模式,就是工厂类一般都是用
	静态的方法,通过接收的参数的不同返回不同的对象实例
	对于增加的新产品无能为力

	//或者是一个接口
	public abstract class Operation {
		public abstract float getResult(float firstNumber, float secondNumber);
	}
	//把符号都当做对象处理,实现此接口
	public class AddOperation extends Operation {
	    @Override
	    public float getResult(float firstNumber, float secondNumber) {
		return firstNumber+secondNumber;
	    }

	}
	public class SubOperation extends Operation {
	    @Override
	    public float getResult(float firstNumber, float secondNumber) {
		return firstNumber-secondNumber;
	    }
	}
	.......还有很多一些类

	//接下来需要解决的就是对象的创建问题了,既如何根据不同的情况创建不同的对象:我们正好可以通过简单工厂模式实现
	//工厂,来实例化和返回指定的对象
	public class OperationFactory {

	    public static Operation getOperation(String quotaFlag){
		Operation o = null;
		switch (quotaFlag){
		    case "+" :  o = new AddOperation();
		    case "-" :  o = new SubOperation();
		    case "*" :  o = new MulOperation();
		    case "/" :  o = new DivOperation();
		    default:break;
		}
		return o;
	    }
	}
	OperationFactory.getOperation();//传一个值
	或者在工厂类中定义多个静态的方法用于返回特定的对象



工厂方法模式
	要点:为了避免简单工厂模式的缺点,不完全满足OCP
	工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于
	一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类
	
	一个产品的接口一个工厂的接口
		下面实现了多组产品类和工厂类
			一个产品类对应一个工厂类
			每增加换一个产品就只需要增加对应该的实现工厂即可,但是还是比较复杂,
			不建议使用

  

原文地址:https://www.cnblogs.com/lrxvx/p/9407044.html