属于创建型模式 (共5种)

    目的:灵活的扩展一系列产品族系;例如:现代人吃穿用、古代人吃穿用、外星人吃穿用

    整体结构:
    抽象的工厂类 抽象方法 返回抽象的产品类;例如(吃穿用类) 创建吃穿用 抽象产品类
    抽象的产品类 有待实现的抽象方法;例如(吃穿用抽象方法)
    具体的产品类 继承 对应的抽象产品类 实现具体抽象方法
    具体的工厂类 继承 抽象的工厂类 实现抽象方法 返回具体的产品类

    优点:
    方便族系的扩展 (添加一个系列方便)例如:软件换皮肤
    类图:
    image.png

    具体工厂返回 具体的产品类

    1. //抽象工厂类 方法返回抽象产品 一个族系的特征
    2. public abstract class AbastractFactory {
    3. abstract Food createFood();
    4. abstract Vehicle createVehicle();
    5. abstract Weapon createWeapon();
    6. }
    7. //抽象产品类 抽取共同方法
    8. public abstract class Vehicle { //interface
    9. abstract void go();
    10. }
    11. //具体产品 实现抽象方法 具体如何做
    12. public class Car extends Vehicle{
    13. public void go() {
    14. System.out.println("Car go wuwuwuwuw....");
    15. }
    16. }
    17. //具体工厂类 实现抽象工厂 返回具体的产品族系
    18. public class ModernFactory extends AbastractFactory {
    19. @Override
    20. Food createFood() {
    21. return new Bread();
    22. }
    23. @Override
    24. Vehicle createVehicle() {
    25. return new Car();
    26. }
    27. @Override
    28. Weapon createWeapon() {
    29. return new AK47();
    30. }
    31. }

    最终使用使用方式举例:
    对象为 父类引用 指向子类对象 调用具体的方法
    image.png
    为什么 这里的产品和工厂都是抽象的而不是接口
    按照面向对象的思想 形容词用接口 名词用抽象类