Java设计模式/创建型模式/抽象工厂模式

发布于:2022-12-22 ⋅ 阅读:(345) ⋅ 点赞:(0)

介绍

在这里插入图片描述

  • 抽象工厂在简单工厂模式之上生产了不同的工厂
  • 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();
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到