java设计模式《抽象工厂方法》
程序员文章站
2024-01-09 23:52:04
...
什么是抽象工厂模式?
就是对一组具有相同主题的工厂进行封装。
例如:生产汽车(Car),奔驰、奥迪(2个子工厂),两种车都有自己的一套配件(产品)。
代码说明:
Car抽象工厂,里面有创建汽车的抽象方法。
CarFactory抽象工厂的派生类,实现抽象方法返回一个实例对象。
AudiProduct接口,声明了一套奥迪的汽车配件(产品)。
BenzProduct接口,声明了一套奔驰的汽车配件(产品)。
AudiCar实现了AudiProduct,对声明的产品做具体的生产。
BenzCar实现了BenzProduct,对声明的产品做具体的生产。
代码实现:
抽象父类:Factory
package abstractfactorymode.car;
public abstract class Factory {
abstract BenzCar createCar1();//返回奔驰汽车
abstract AudiCar createCar2();//返回奥迪汽车
}
派生紫工厂:CarFactory
package abstractfactorymode.car;
public class CarFactory extends Factory{
//返回一个奔驰的实例
@Override
BenzCar createCar1() {
return new BenzCar();
}
//返回一个奥迪的实例
@Override
AudiCar createCar2() {
return new AudiCar();
}
}
奥迪的产品 AudiProduct接口
package abstractfactorymode.car;
public interface AudiProduct {
void getTire();//轮胎
void getVersion();//型号
void getEngine();//引擎
}
奔驰的产品 BenzProduct接口
package abstractfactorymode.car;
public interface BenzProduct {
void getTire();//轮胎
void getVersion();//型号
void getEngine();//引擎
}
奥迪产品的具体实现AudiCar
package abstractfactorymode.car;
public class AudiCar implements AudiProduct{
@Override
public void getTire() {
System.out.println("奥迪的轮胎");
}
@Override
public void getVersion() {
System.out.println("奥迪的车型");
}
@Override
public void getEngine() {
System.out.println("奥迪的引擎");
}
}
奔驰产品的具体实现BenzCar
package abstractfactorymode.car;
public class BenzCar implements BenzProduct{
@Override
public void getTire() {
System.out.println("奔驰的轮胎");
}
@Override
public void getVersion() {
System.out.println("奔驰的车型");
}
@Override
public void getEngine() {
System.out.println("奔驰的引擎");
}
}
测试类:
package abstractfactorymode.car;
public class Test {
public static void main(String[] args) {
Factory factory =new CarFactory();
AudiCar car =factory.createCar2();
car.getEngine();
car.getTire();
car.getVersion();
System.out.println();
BenzCar bcar =factory.createCar1();
bcar.getEngine();
bcar.getTire();
bcar.getVersion();
}
}
结果:
奥迪的引擎
奥迪的轮胎
奥迪的车型
奔驰的引擎
奔驰的轮胎
奔驰的车型