前言
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的
一、工厂模式的分类
1、简单工厂模式(Simple Factory)
2、工厂方法模式(Factory Method)
3、抽象工厂模式(Abstract Factory)
二、简单工厂模式
简单工厂模式的组成:
1、工厂类角色:这是本模式的核心,含有一定的判断逻辑。在java中它往往由一个具体类实现。
2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
下面以一个简单的例子看下:
抽象产品角色:
public interface Car {
void driver();
}
具体产品角色:
public class BaoMa implements Car{
@Override
public void driver() {
System.out.println("I am baoma......");
}
}
public class BenChi implements Car{
@Override
public void driver() {
System.out.println("I am benchi......");
}
}
工厂类角色:
public class SimpleFactory {
public static Car getJutiCar(String carName){
//判断逻辑,该模式的核心
if("baoma".equals(carName)){
return new BaoMa();
}else if ("benchi".equals(carName)){
return new BenChi();
}
return null;
}
}
执行结果:
public class DemoClass {
public static void main(String[] args) {
Car baoma = SimpleFactory.getJutiCar("baoma");
baoma.driver();
System.out.println("--------------------");
Car benchi = SimpleFactory.getJutiCar("benchi");
benchi.driver();
}
}
我们在开发过程中一向本着开闭原则(对扩展开放,对修改关闭),此时如果我们再增加一个奥迪车型都要在工厂类中增加相应的业务逻辑或者判断逻辑,这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。于是工厂方法模式出现了。
三、工厂方法模式
工厂方法模式的组成:
1、抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2、具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3、抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4、具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
代码示例:
抽象工厂角色:
public interface AbstractFactory {
Car driver();
}
具体工厂:
//宝马工厂
public class BaoMaFactory implements AbstractFactory{
@Override
public Car driver() {
return new BaoMa();
}
}
//奔驰工厂
public class BenChiFactory implements AbstractFactory{
@Override
public Car driver() {
return new BenChi();
}
}
抽象产品:
public interface Car {
void driver();
}
具体产品:
//宝马产品
public class BaoMa implements Car{
@Override
public void driver() {
System.out.println("I am baoma......");
}
}
//奔驰产品
public class BenChi implements Car{
@Override
public void driver() {
System.out.println("I am benchi......");
}
}
执行结果:
public class DemoClass {
public static void main(String[] args) {
AbstractFactory driver1 = new BaoMaFactory();
Car driverBaoMa = driver1.driver();
driverBaoMa.driver();
System.out.println("------------");
AbstractFactory driver2 = new BenChiFactory();
Car driverBenChi = driver2.driver();
driverBenChi.driver();
System.out.println("------------");
}
}
四、抽象工厂模式
抽象工厂模式和工厂方法模式的区别就在于创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。
抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象
而且使用抽象工厂模式还要满足一下条件:
1.系统中有多个产品族,而系统一次只可能消费其中一族产品。
2.同属于同一个产品族的产品以其使用。
来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):
1.抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2.具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
3.抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4.具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。