如果对面向对象还不太熟悉,建议先把面向对象的概念过一遍比较好。
一、简单工厂模式的概念
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
show me code~
举个栗子:
抽象产品–汽车,汽车有很多品牌:Audi、Benz、BMW···
现在有一个客户想开Benz品牌的车,那么最直接的做法就是创建Benz汽车的实例,然后开走~
Benz benz = new Benz();
benz.addGPS();
benz.addRecodes();
benz.addWheels();
benz.drive();
那么再来一个客户,想开Audi品牌的车,那么我们和之前一样,
Audi audi = new Audi();
audi.addGPS();
audi.addRecodes();
audi.addWheels();
audi.drive();
问题就出现了,客户和汽车的创建耦合在一起了,客户是不需要知道的创建的细节的。
所以为了降低耦合,就可以把这些都放到工厂里面去做,客户只需要告诉工厂汽车的品牌和型号就可以了,所有细节交给工厂完成就可以了。这就是简单工厂模式。
工厂类:
public class CarFactory{
public Benz createBenz(int type){
switch(type){
case 200 :
return new Benz200();
break;
case 260 :
return new Benz260();
break;
case 300 :
return new Benz300();
break;
default:
break;
}
}
}
客户类:
public class Customer{
public static viod main(String[] args){
CarFactory carFactory = new CarFactory();
Benz benz200 = carFactory.createBenz(200);//客户定制车型号
benz200.drive();//客户开走
}
}
二、简单工厂模式中的几个角色
在简单工厂模式中包含如下几个角色:
Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product。
Product(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。
ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。
在简单工厂模式中,客户端通过工厂类来创建一个产品类的实例,而无须直接使用new关键字来创建对象,它是工厂模式家族中最简单的一员。