工厂模式出现的原因
在java中,创建一个对象最简单的方法就是使用new关键字。但在一些复杂的业务逻辑中,创建一个对象不只需要new一行代码就成了,可能需要一些列的初始化设置,或先创建一些辅助对象来创建这个对象。
在这种场景中,如果需要多次创建这种对象,那每次都要写很多代码。工厂模式的产生就是为了解决这种问题。
工厂模式厉害之处就在于:你不需要知道创建对象的细节就可以轻松的创建你想要的对象,并且产品和工厂是解耦的。
3中工厂模式介绍 1、简单工厂模式1个具体工厂类,1个抽象产品类,多个具体产品类
每个工厂可以创建多个产品实例,当需要创建新产品的时候,需要修改工厂类,不符合java开放-闭包原则
用户需要什么类型的产品,告诉工厂类,工厂类就创建什么类型的产品实例
2、工厂方法模式1个抽象工厂类,多个具体工厂类,1个抽象产品类,多个具体产品类
每个工厂只能创建1个产品实例,当需要创建新产品的时候,需要扩展抽象工厂类,而不需要修改,符合java开闭原则
用户需要什么类型的产品,就从什么类型的工厂生产
3、抽象工厂模式1个抽象工厂类,多个具体工厂类,多个抽象产品类,多个抽象产品类
每个工厂可以创建多个产品实例,当需要创建新产品的时候,需要扩展抽象工厂类,而不需要修改,符合java开放-闭包原则
用户需要什么类型的产品,就从什么类型的工厂生产
用于生产一组相关或者相互依赖的产品
下面以工厂生产宝马车为例子开始具体介绍这3种工厂模式 一、简单工厂模式需求:用户需要宝马车,并希望工厂根据自己提出的类型可以生产不同类型的宝马车
public abstract class BMW {} public class BMW320 extends BMW {} public class BMW520 extends BMW {} public class BMWFactory { BMW createBMW(Integer type){ if(type == 320){ return new BMW320(); }else if(type == 520){ return new BMW520(); }else{ return null; } } } public class Customer { public static void main(String[] args) { BMWFactory bmwFactory = new BMWFactory(); BMW myBMW320 = bmwFactory.createBMW(320); //告诉工厂自己需要什么类型的产品 BMW myBMW520 = bmwFactory.createBMW(520); } }