工厂模式一般有三种:简单工厂,工厂方法,抽象工厂
定义:
简单工厂:简单工厂模式又称静态工厂方法模式,定义一个用于创建对象的接口。
工厂方法:定义了一个创建对象的接口,但由于子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
抽象工厂:提供一个抽象接口用来用来创建一个产品家族。
工厂模式依赖的原则:
简单工厂:
实例:
一个car有几个子类,有一个工厂创建不同的car实例
public class StaticCarFactory {
// 静态工厂
public static Car createCar(String type) {
if ("bmwx3".equals(type)) {
return new BmwX3Car();
} else if ("bmwx5".equals(type)) {
return new BmwX5Car();
} else if ("bmwx7".equals(type)) {
return new BmwX7Car();
} else
return null;
}
}
public class CarSalesShop {
public Car orderCar(String type) {
Car car = StaticCarFactory.createCar(type);// 通过工厂类,根据type创建一个Car实例
car.prepare();
car.fabricate();
car.detect();
System.out.println("A " + car.getName() + " car is ready.");
return car;
}
}
工厂方法:
public Car orderCar(String type) {
Car car = createCar(type);
car.prepare();
car.fabricate();
car.detect();
System.out.println("A " + car.getName() + " car is ready.");
return car;
}
// 工厂方法接口
public abstract Car createCar(String type);
}
public class BeijingCarSalesShop extends CarSalesShop {
@Override
public Car createCar(String type) {
if ("bmwx3".equals(type)) {
return new BeijingBmwX3Car();
} else if ("bmwx5".equals(type)) {
return new BeijingBmwX5Car();
} else if ("bmwx7".equals(type)) {
return new BeijingBmwX7Car();
} else
return null;
}
}
public class ShanghaiCarSalesShop extends CarSalesShop {
@Override
public Car createCar(String type) {
if ("bmwx3".equals(type)) {
return new ShanghaiBmwX3Car();
} else if ("bmwx5".equals(type)) {
return new ShanghaiBmwX5Car();
} else if ("bmwx7".equals(type)) {
return new ShanghaiBmwX7Car();
} else
return null;
}
}
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
实例:假设每个地区的car需要本地区的不同的零件,通过一个工厂家族
// 汽车零件制造工厂
public interface PartsFactory {
public Engine createEngine();
public Wheel createWheel();
//这里相当于一个工厂方法
public Lamp createLamp();
}
public class BeijingPartsFactory implements PartsFactory {
public Engine createEngine() {
return new BeijingEngine();
}
public Lamp createLamp() {
return new BeijingLamp();
}
public Wheel createWheel() {
return new BeijingWheel();
}
}
public class ShanghaiPartsFactory implements PartsFactory {
public Engine createEngine() {
return new ShanghaiEngine();
}
public Lamp createLamp() {
return new ShanghaiLamp();
}
public Wheel createWheel() {
return new ShanghaiWheel();
}
}