工厂模式的主要作用是为创建对象提供了接口,分为简单工厂模式、工厂方法模式、抽象工厂模式。
一、 简单工厂模式:
1 使用:具体的产品种类比较少的情况下使用,使用在业务比较简单的情况下。
2构成:抽象产品类,它一般是具体产品类继承的父类或者实现的接口,通常由抽象类或者接口实现。
具体产品类,在工厂类中创建此类的实例对象
工厂类,调用工厂类的方法生成具体的产品类对象。
3 实现:
public class TestFactory {
// 抽象产品接口
interface Car {
public void drive();
}
// 具体产品类
static class Bmw implements Car {
public void drive() {
System.out.println("bmw drived");
}
}
static class Benz implements Car {
public void drive() {
System.out.println("Benz drived");
}
}
static class Audi implements Car {
public void drive() {
System.out.println("Audi drived");
}
}
// 工厂类
static class Driver {
public static Car driveCar(String carName) {
if (carName == "bmw") {
return new Bmw();
} else if (carName == "Benz") {
return new Benz();
} else if (carName == "Audi") {
return new Audi();
}
return null;
}
}
public static void main(String[] args) {
// 测试简单工厂模式
Car car = Driver.driveCar("bmw");
car.drive();
}
}
注:要在main ()中测试简单工厂使用,所以所有的类、接口都加了static关键字,开发中抽象产品类(接口)、具体产品类、工厂类在不同的文件中。
简单工厂模式的不足:
如果新增产品的话,只要实现具体产品接口即可,对于产品部分符合“开闭原则”(对扩展开放,对修改关闭),但是新增产品后,工厂类中还要增加逻辑判断,不符合“开闭原则”。
所以简单工厂模式适用于业务简单的情况下,随时可能新增产品的情况,简单工厂模式不适用,此时工厂方法模式适用,见下。
二 、工厂方法模式
1 使用:业务复杂的情况下使用
2 构成:抽象产品类(接口)、具体产品类、具体工厂类,同上。
抽象工厂类(接口):具体工厂类继承的父类或者要实现的接口。
3 实现:
public class TestFactory {
// 抽象产品接口
interface Car {
public void drive();
}
// 具体产品类
static class Bmw implements Car {
public void drive() {
System.out.println("bmw drived");
}
}
static class Benz implements Car {
public void drive() {
System.out.println("Benz drived");
}
}
static class Audi implements Car {
public void drive() {
System.out.println("Audi drived");
}
}
// 抽象工厂类
interface Driver {
public Car driverCar();
}
// 具体工厂类
static class BenzDriver implements Driver {
public Car driverCar() {
return new Benz();
}
}
static class BmwDriver implements Driver {
public Car driverCar() {
return new Bmw();
}
}
static class AudiDriver implements Driver {
public Car driverCar() {
return new Audi();
}
}
public static void main(String[] args) {
// 测试工厂方法模式
Car car = new BmwDriver().driverCar();
car.drive();
}
}
在工厂方法模式中,每增加一种产品,就要增加生产该产品的具体工厂类,每个工厂类只生产一种产品。工厂方法模式符合开闭原则,新增产品时不必修改已有的代码,只需增加具体产品类、具体工厂类即可。
不足:当产品种类太多时,就会出现大量的与之对应的具体工厂类,要编写大量的代码,开发费时费力。
三、抽象工厂模式(略)
参考http://haolloyin.blog.51cto.com/1177454/332802