用工厂方法代替new操作的一种模式,包括简单工厂,工厂方法,抽象工厂
interface Car {
void run();
}
class BaoMa implements Car {
@Override
public void run() {
System.out.println("宝马");
}
}
class BenChi implements Car {
@Override
public void run() {
System.out.println("奔驰");
}
}
/**
* 简单工厂模式
*
* 当创建新类型时,工厂类需要修改,添加对应的创建方法
*/
class SingleCarFactory {
static BaoMa createBaoMa() {
return new BaoMa();
}
static BenChi createBenChi() {
return new BenChi();
}
}
/**
* 工厂方法模式
*/
interface CarFactory {
Car createCar();
}
class BenChiFactory implements CarFactory {
@Override
public Car createCar() {
return new BenChi();
}
}
class BaoMaFactory implements CarFactory {
@Override
public Car createCar() {
return new BaoMa();
}
}
/**
* 抽象工厂模式
*
*/
interface Tyre {
void createTyre();
}
class LowTyre implements Tyre {
@Override
public void createTyre() {
System.out.println("低端轮胎");
}
}
class LuxuryTyre implements Tyre {
@Override
public void createTyre() {
System.out.println("高端轮胎");
}
}
interface Engine {
void createEngine();
}
class LowEngine implements Engine {
@Override
public void createEngine() {
System.out.println("低端发动机");
}
}
class LuxuryEngine implements Engine {
@Override
public void createEngine() {
System.out.println("高端发动机");
}
}
interface AbstractCarFactory {
Engine createEngine();
Tyre createTyre();
}
class LowCar implements AbstractCarFactory {
@Override
public Engine createEngine() {
Engine engine = new LowEngine();
engine.createEngine();
return engine;
}
@Override
public Tyre createTyre() {
Tyre tyre = new LowTyre();
tyre.createTyre();
return tyre;
}
}