设计模式案例--工厂模式--抽象工厂(abstractfactory)

时间:2022-09-08 20:27:29

抽象工厂(abstractfactory)

1、抽象工厂类

package com.dou361.factory;

import com.dou361.car.BenzCar;
import com.dou361.car.BmwCar;


/**
* @author Admin
*抽象工厂
*一般项目从这里先开始
*抽象工厂模式的应用场景:每一个模式都是针对一定问题的解决方案。
*抽象工厂模式与工厂方法模式的最大区别就在于,
*工厂方法模式针对的是一个产品等级结构;
*而抽象工厂模式则需要面对多个产品等级结构。
*产品族和产品等级的概念.
*
*抽象工厂的创建步骤
*1创建一个抽象的工厂接口,提取公共的方法,这里需要和产品等级接口的对象建立关系,需要定义方法创建抽象产品的对象
*2工厂根据族的个数来创建实现的工厂
*3产品对象,根据产品等级的个数来创建接口
*4实现具体的产品对象,个数一般是(具体工厂数*产品等级接口数)
*/
public interface CarAbstractFactory {

BenzCar createBenzCar();

BmwCar createBmwCar();

}

2、具体工厂类

package com.dou361.factory.impl;

import com.dou361.car.BenzCar;
import com.dou361.car.BmwCar;
import com.dou361.car.impl.SportsBenzCar;
import com.dou361.car.impl.SportsBmwCar;
import com.dou361.factory.CarAbstractFactory;

public class SportsCarFactory implements CarAbstractFactory{

@Override
public BenzCar createBenzCar() {
return new SportsBenzCar();
}

@Override
public BmwCar createBmwCar() {
return new SportsBmwCar();
}


}

package com.dou361.factory.impl;

import com.dou361.car.BenzCar;
import com.dou361.car.BmwCar;
import com.dou361.car.impl.BussinessBenzCar;
import com.dou361.car.impl.BussinessBmwCar;
import com.dou361.factory.CarAbstractFactory;

public class BussinessCarFactory implements CarAbstractFactory {

@Override
public BenzCar createBenzCar() {
return new BussinessBenzCar();
}

@Override
public BmwCar createBmwCar() {
return new BussinessBmwCar();
}

}
3、抽象汽车类

package com.dou361.car;

public interface Car {
void drive();
}

package com.dou361.car;

public interface BmwCar extends Car {
void exhaust();
}

package com.dou361.car;

public interface BenzCar extends Car {
void weight();
}
4、具体汽车类

package com.dou361.car.impl;

import com.dou361.car.BenzCar;

public class BussinessBenzCar implements BenzCar {

@Override
public void drive() {
System.out.println("商务Benz车");
}

@Override
public void weight() {
System.out.println("2.5个吨位");
}

}

package com.dou361.car.impl;

import com.dou361.car.BmwCar;

public class BussinessBmwCar implements BmwCar {

@Override
public void drive() {
System.out.println("商务Bmw车");
}

@Override
public void exhaust() {
System.out.println("节能型");
}

}

package com.dou361.car.impl;

import com.dou361.car.BenzCar;

public class SportsBenzCar implements BenzCar {

@Override
public void drive() {
System.out.println("运动Benz车");
}

@Override
public void weight() {
System.out.println("2.0个吨位");
}

}

package com.dou361.car.impl;

import com.dou361.car.BmwCar;

public class SportsBmwCar implements BmwCar {

@Override
public void drive() {
System.out.println("运动Bmw车");
}

@Override
public void exhaust() {
System.out.println("二级节能型");
}

}

5、测试类

package com.dou361.test;

import com.dou361.car.BenzCar;
import com.dou361.factory.CarAbstractFactory;
import com.dou361.factory.impl.BussinessCarFactory;

public class Magnate {
public static void main(String[] args) {
CarAbstractFactory abstractFactory = new BussinessCarFactory();
BenzCar benzCar = abstractFactory.createBenzCar();
benzCar.drive();
benzCar.weight();
}
}