- 工厂模式:实现创建者和调用者的分离
- 简单工厂模式
public interface Car {
void run();
}
public class Audi implements Car{
@Override
public void run() {
System.out.println("=====奥迪run");
}
}
public class Jeep implements Car {
@Override
public void run() {
System.out.println("======Jeep run");
}
}
public class CarFactory {
public static Car createCar(String type) {
if ("Audi".equals(type)) {
return new Audi();
} else if ("Jeep".equals(type)) {
return new Jeep();
} else {
return null;
}
}
}
使用:
public class TestFactory {
public static void main(String[] args) {
Car audiCar = CarFactory.createCar("Audi");
audiCar.run();
Car jeepCar = CarFactory.createCar("Jeep");
jeepCar.run();
}
}
- 工厂方法模式:工厂方法模式和简单工厂模式最大的不同在于简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
public interface CarFactory {
Car createCar();
}
public class JeepFactory implements CarFactory{
@Override
public Car createCar() {
return new Jeep();
}
}
public class AudiFactory implements CarFactory{
@Override
public Car createCar() {
return new Audi();
}
}
使用:
Car audiCar = new AudiFactory().createCar();
audiCar.run();
Car jeepCar = new JeepFactory().createCar();
jeepCar.run();
- 抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族);抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
public interface Car {
void run();
void start();
}
class Audi implements Car{
@Override
public void run() {
System.out.println("====奥迪车跑的快");
}
@Override
public void start() {
System.out.println("====奥迪车启动快");
}
}
class Otto implements Car {
@Override
public void run() {
System.out.println("====奥拓车跑的慢");
}
@Override
public void start() {
System.out.println("====奥拓车启动慢");
}
}
public interface Animal {
void run();
}
class Cat implements Animal{
@Override
public void run() {
System.out.println("====小喵跑的慢");
}
}
class Dog implements Animal{
@Override
public void run() {
System.out.println("=====旺财跑的快");
}
}
public interface AbstractFactory {
Animal createAnimal();
Car createCar();
}
public class CreateObjectFactory implements AbstractFactory{
@Override
public Animal createAnimal() {
return new Dog();
}
@Override
public Car createCar() {
return new Audi();
}
}
public class CreateObjectFactory2 implements AbstractFactory{
@Override
public Animal createAnimal() {
return new Cat();
}
@Override
public Car createCar() {
return new Otto();
}
}
public class Test {
public static void main(String[] args) {
Car audiCar = new CreateObjectFactory().createCar();
Animal dogAnimal = new CreateObjectFactory().createAnimal();
audiCar.run();
audiCar.start();
dogAnimal.run();
Car ottoCar = new CreateObjectFactory2().createCar();
Animal cataAnimal = new CreateObjectFactory2().createAnimal();
ottoCar.run();
ottoCar.start();
cataAnimal.run();
}