介绍
- 抽象工厂在简单工厂模式之上生产了不同的工厂
- 1个简单工厂能够生产1个系列的产品
- 不同简单工厂抽象为抽象工厂
- 工厂生产者生产不同的工厂,不同的工厂再生产不同的产品
- 可以生产不同系列的产品,不同系列的对象
应用
- 存在不同系列的产品需要生产
优点
- 工厂和产品都不需要程序员自己生产
缺点
- 增加1个系列的产品既需要增加1个工厂又需要再工厂生产者中补充代码
代码
carfactory/CarFactory
public abstract class CarFactory {
public abstract DaZhong createDaZhong(String daZhongCarType);
public abstract Porsche createPorsche(String porscheCarType);
}
carfactory/DaZhongCarFactory
/*
* 大众系列产品生产工厂
* */
public class DaZhongCarFactory extends CarFactory {
@Override
public Porsche createPorsche(String porscheCarType) {
return null;
}
@Override
public DaZhong createDaZhong(String daZhongCarType) {
if (daZhongCarType == null) {
return null;
}
if (daZhongCarType.equalsIgnoreCase("jieDa")) {
return new JieDa();
}
if (daZhongCarType.equalsIgnoreCase("paSaTe")) {
return new PaSaTe();
}
if (daZhongCarType.equalsIgnoreCase("sangTaNa")) {
return new SangTaNa();
}
return null;
}
}
carfactory/PorscheCarFactory
/*
* 保时捷系列产品生产工厂
* */
public class PorscheCarFactory extends CarFactory {
@Override
public DaZhong createDaZhong(String daZhongCarType) {
return null;
}
@Override
public Porsche createPorsche(String porscheCarType) {
if (porscheCarType == null) {
return null;
}
if (porscheCarType.equalsIgnoreCase("porsche718")) {
return new Porsche718();
}
if (porscheCarType.equalsIgnoreCase("porsche911")) {
return new Porsche911();
}
if (porscheCarType.equalsIgnoreCase("porsche918")) {
return new Porsche918();
}
return null;
}
}
carfactory/CarFactoryProducer
public class CarFactoryProducer {
public static CarFactory produceDaZhongCarFactory() {
return new DaZhongCarFactory();
}
public static CarFactory producePorscheCarFactory() {
return new PorscheCarFactory();
}
}
dazhong/DaZhong
/*
* 大众系列产品
* */
public interface DaZhong {
void price();
}
dazhong/JieDa
/*
* 捷达
* */
public class JieDa implements DaZhong {
public void price() {
System.out.println("捷达:10万元左右");
}
}
dazhong/PaSaTe
/*
* 帕萨特
* */
public class PaSaTe implements DaZhong{
public void price() {
System.out.println("帕萨特:25万元左右");
}
}
dazhong/SangTaNa
/*
* 桑塔纳
* */
public class SangTaNa implements DaZhong {
public void price() {
System.out.println("桑塔纳:5万元左右");
}
}
porsche/Porsche
public interface Porsche {
void price();
}
porsche/Porsche718
public class Porsche718 implements Porsche {
public void price() {
System.out.println("保时捷718:大约60万元");
}
}
porsche/Porsche911
public class Porsche911 implements Porsche {
public void price() {
System.out.println("保时捷911:大约100万元");
}
}
porsche/Porsche918
public class Porsche918 implements Porsche {
public void price() {
System.out.println("保时捷918:大约1000万元");
}
}
Main
public class Main {
public static void main(String[] args) {
// 创建大众汽车系列工厂
CarFactory daZhongCarFactory = CarFactoryProducer.produceDaZhongCarFactory();
// 创建大众系列产品
DaZhong jieDa = daZhongCarFactory.createDaZhong("jieDa");
jieDa.price();
DaZhong paSaTe = daZhongCarFactory.createDaZhong("paSaTe");
paSaTe.price();
DaZhong sangTaNa = daZhongCarFactory.createDaZhong("sangTaNa");
sangTaNa.price();
// 创建保时捷汽车系列工厂
CarFactory porscheCarFactory = CarFactoryProducer.producePorscheCarFactory();
// 创建保时捷系列产品
Porsche porsche718 = porscheCarFactory.createPorsche("porsche718");
porsche718.price();
Porsche porsche911 = porscheCarFactory.createPorsche("porsche911");
porsche911.price();
Porsche porsche918 = porscheCarFactory.createPorsche("porsche918");
porsche918.price();
}
}