抽象工厂(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;3、抽象汽车类
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();
}
}
package com.dou361.car;
public interface Car {
void drive();
}
package com.dou361.car;
public interface BmwCar extends Car {
void exhaust();
}
package com.dou361.car;4、具体汽车类
public interface BenzCar extends Car {
void weight();
}
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();
}
}