欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

工厂模式之抽象工厂

程序员文章站 2022-06-19 14:47:30
工厂模式之抽象工厂是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。类继承自抽象工厂,即可生产指定对象。新增实体的时候无需修改已有代码。比如食物这个工厂,在现实世界中,它可以生产面包、鸡蛋、肉等,在魔法世界中,食物工厂可以生产魔法豆、会唱歌的火鸡、HP口服液等,我们把食物比作是最大的一个抽象工厂,现实世界(ModernFactory)抽象工厂和魔法世界(MagicFactory)抽象工厂继承自最大的食物抽象工厂,然而bread面包、egg鸡蛋、meat肉类都继承自ModernFact...

工厂模式之抽象工厂

是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。类继承自抽象工厂,即可生产指定对象。新增实体的时候无需修改已有代码。比如食物这个工厂,在现实世界中,它可以生产面包、鸡蛋、肉等,在魔法世界中,食物工厂可以生产魔法豆、会唱歌的火鸡、HP口服液等,我们把食物比作是最大的一个抽象工厂,现实世界(ModernFactory)抽象工厂和魔法世界(MagicFactory)抽象工厂继承自最大的食物抽象工厂,然而bread面包、egg鸡蛋、meat肉类都继承自ModernFactory抽象工厂、MagicBeans魔法豆等继承自MagicFactory,我们把食物的世界分为了现实和魔法两族,而这两族中又分为了面包、鸡蛋、火腿肠、啤酒、饮料、矿泉水等更为具体族(对象),当我们任意定制新的产品一族时就无需再修改已有代码,只需根据产品分类不同,继承自不同的工厂即可,一步步化抽象为具体,抽象工厂实际最大的好处就是实现了代码的解耦。

talk is cheaper,show me your code.

Abstractory.class

/**
 * @author Liutx
 * @date 2020/12/8 22:18
 * @Description
 */
public abstract class Abstractory {
    /**
     * 抽象工厂可以生产食物
     * @return
     */
    abstract Food createFood();
}

Food.class

public abstract class Food {
    abstract void printName();
}

MagicBeans.class

public class MagicBeans extends Food{

    @Override
    void printName() {
        System.out.println("I create MagicBeans");
    }
}

Bread.class

public class Bread extends Food{
    @Override
    void printName() {
        System.out.println("I create Bread");
    }
}

MagicFactory.class

public class MagicFactory extends Abstractory {

    @Override
    Food createFood() {
        return new MagicBeans();
    }
}

ModernFactory.class

public class ModernFactory extends Abstractory {

    @Override
    Food createFood() {
        return new Bread();
    }
}

实例解读:抽象工厂可以创建食物对象,食物大类分为现实世界的面包和魔法世界的魔法豆,面包是由现实工厂生产的,魔法豆是由魔法工厂生产的,魔法豆一族和面包一族分别继承自食物,通过代码工厂就可以根据需求生产不同的食物(调用不同的方法)。

Main.class

public class Main {
    public static void main(String[] args) {
        Abstractory mg = new MagicFactory();
        Food mgFood = mg.createFood();
        mgFood.printName();

        System.out.println("======================魔法与现实的分界线=======================");

        Abstractory md = new ModernFactory();
        Food mdFood = md.createFood();
        mdFood.printName();
    }
}

输出:

I create MagicBeans
======================魔法与现实的分界线=======================
I create Bread

本文地址:https://blog.csdn.net/weixin_42313773/article/details/110912722