实例化对象:实现了创建者和调用者的分离。
多个接口,构成了产品族的时候使用抽象工厂模式
用来生产不同产品族的全部产品,对于生成新的产品,无能为力。
比如质量好,中,坏的发动机,座椅,轮胎组成好,中,坏的车
质量好和差一点的发动机类和接口
package
com.bjsxt.factory.abstractFactory;
public
interface
Engine {
void
run();
void
start();
}
class
LuxuryEngine
implements
Engine{
@Override
public
void
run() {
System.out.println(
"转的快!"
);
}
@Override
public
void
start() {
System.out.println(
"启动快!可以自动启停!"
);
}
}
class
LowEngine
implements
Engine{
@Override
public
void
run() {
System.out.println(
"转的慢!"
);
}
@Override
public
void
start() {
System.out.println(
"启动慢!"
);
}
}
质量好和差一点的座椅类和接口
package
com.bjsxt.factory.abstractFactory;
public
interface
Seat {
void
massage();
}
class
LuxurySeat
implements
Seat {
@Override
public
void
massage() {
System.out.println(
"可以自动按摩!"
);
}
}
class
LowSeat
implements
Seat {
@Override
public
void
massage() {
System.out.println(
"不能按摩!"
);
}
}
package
com.bjsxt.factory.abstractFactory;
public
interface
Tyre {
void
revolve();
}
class
LuxuryTyre
implements
Tyre {
@Override
public
void
revolve() {
System.out.println(
"旋转不磨损!"
);
}
}
class
LowTyre
implements
Tyre {
@Override
public
void
revolve() {
System.out.println(
"旋转磨损快!"
);
}
}
汽车工厂接口:
package
com.bjsxt.factory.abstractFactory;
public
interface
CarFactory {
Engine createEngine();
Seat createSeat();
Tyre createTyre();
}
package
com.bjsxt.factory.abstractFactory;
public
class
LuxuryCarFactory
implements
CarFactory {
@Override
public
Engine createEngine() {
return
new
LuxuryEngine();
}
@Override
public
Seat createSeat() {
return
new
LuxurySeat();
}
@Override
public
Tyre createTyre() {
return
new
LuxuryTyre();
}
}
package
com.bjsxt.factory.abstractFactory;
public
class
LowCarFactory
implements
CarFactory {
@Override
public
Engine createEngine() {
return
new
LowEngine();
}
@Override
public
Seat createSeat() {
return
new
LowSeat();
}
@Override
public
Tyre createTyre() {
return
new
LowTyre();
}
}
测试代码:
package
com.bjsxt.factory.abstractFactory;
public
class
Client {
public
static
void
main(String[] args) {
CarFactory factory =
new
LuxuryCarFactory();
Engine e = factory.createEngine();
e.run();
e.start();
}
}