java设计模式《抽象工厂方法》

什么是抽象工厂模式?

就是对一组具有相同主题的工厂进行封装。

例如:生产汽车(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();
	}
}
结果:
      奥迪的引擎
      奥迪的轮胎
      奥迪的车型

      奔驰的引擎
      奔驰的轮胎
      奔驰的车型


猜你喜欢

转载自blog.csdn.net/weixin_35654814/article/details/81170786