解决的问题

实现了创建者与调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

具体模式

  • 简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)

interface Car {
void run();
}

class Audi implements Car {
public void run() {
System.out.println(“奥迪在跑”);
}
}

class BYD implements Car {
public void run() {
System.out.println(“比亚迪在跑”);
}
}

// 工厂类
class CarFactory {
// 方式一
public static Car getCar(String type) {
if (“奥迪”.equals(type)) {
return new Audi();
} else if (“比亚迪”.equals(type)) {
return new BYD();
} else {
return null;
}
}
// 方式二
// public static Car getAudi() {
// return new Audi();
// }
//
// public static Car getByd() {
// return new BYD();
// }
}

public class Client {
public static void main(String[] args) {
Car a = CarFactory.getCar(“奥迪”);
a.run();
Car b = CarFactory.getCar(“比亚迪”);
b.run();
}
}

  • 工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)

interface Car {
void run();
}

// 两个实现类
class Audi implements Car {
public void run() {
System.out.println(“奥迪在跑”);
}
}

class BYD implements Car {
public void run() {
System.out.println(“比亚迪在跑”);
}
}

// 工厂接口
interface Factory {
Car getCar();
}

// 两个工厂类
class AudiFactory implements Factory {
public Audi getCar() {
return new Audi();
}
}

class BydFactory implements Factory {
public BYD getCar() {
return new BYD();
}
}

public class Client {
public static void main(String[] args) {
Car a = new AudiFactory().getCar();
Car b = new BydFactory().getCar();
a.run();
b.run();
}
}

抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)