专栏首页关忆北.工厂模式之抽象工厂

工厂模式之抽象工厂

工厂模式之抽象工厂

是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。类继承自抽象工厂,即可生产指定对象。新增实体的时候无需修改已有代码。比如食物这个工厂,在现实世界中,它可以生产面包、鸡蛋、肉等,在魔法世界中,食物工厂可以生产魔法豆、会唱歌的火鸡、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复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 工厂模式之抽象工厂

    然后挖了个坑…没有说 Abstract Factory,主要是因为这两种模式之间相似度比较高, 一起讲容易混淆,所以就另起一篇来说了。

    PhoenixZheng
  • 设计模式之工厂模式-抽象工厂模式

    2:如果我们把对象实例化代码进行抽象,抽象成创建对象的方法跟具体的实例化(也就是其子类),这种就是工厂方法模式。工厂方法模式的意义:将对象的创建过程,由原来的在...

    凯哥Java
  • Java设计模式之工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

    在java中,创建一个对象最简单的方法就是使用new关键字。但在一些复杂的业务逻辑中,创建一个对象不只需要new一行代码就成了,可能需要一些列的初始化设置,或先...

    用户2409797
  • 简单工厂模式、工厂模式、抽象工厂模式比较

    设计模式已经经历了很长一段时间的发展,它们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件...

    良知犹存
  • 工厂模式——抽象工厂模式(+反射)

    这里又出现了一个抽象工厂模式,这个抽象工厂模式又是什么呢? 我们现在来模拟一个场景,现在用的是Mysql数据库,明天让你更换为Oracle数据库。此时,想想要做...

    用户1148394
  • 设计模式 之 抽象工厂模式

    工厂模式中讲了女娲造人的故事。人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍...

    Jacob丶
  • [设计模式]之十三:抽象工厂模式

    抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。

    wOw
  • 设计模式之抽象工厂模式

    tanoak
  • 抽象工厂模式

    抽象工厂模式Abstract Factory是通过对类的工厂抽象使其业务用于对产品类簇的创建,而不仅仅是负责创建某一类产品的实例,抽象工厂模式提供一个创建一系列...

    WindrunnerMax
  • 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。

    Dylan Liu
  • 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式...

    Java编程指南
  • 设计模式之抽象工厂模式

    Provide an interface for creating families of related or dependent objects witho...

    beginor
  • 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory),是23种设计模式之一。DP中是这么定义抽象工厂模式的:

    端碗吹水
  • 抽象工厂模式

    抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。——《设计模式:可复用面向对象软件的基础》

    mingmingcome
  • 抽象工厂模式

    ?原文地址为https://www.cnblogs.com/haixiang/p/12055272.html,转载请注明出处!

    海向
  • 02.工厂模式/抽象工厂模式

    工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在...

    Java帮帮
  • 工厂模式工厂方法简单工厂抽象工厂

    这是一个比较标准的工厂方法设计模式。车可以生产车,那具体的奥迪车工厂可以生产奥迪车,奔驰车工厂可以生产奔驰的车。当需要生产法拉利的车时,我们只需要实现一个法拉利...

    用户2929716
  • 设计模式之工厂模式!深入解析简单工厂模式,工厂方法模式和抽象工厂模式

    攻城狮Chova
  • 抽象工厂模式

    老板:阿飞,上次面包店老板找我聊了一下,他们是大规模的从各大小原料商铺进的原料,出现了好多偷工减料的情况,现在他们做大了,想自己开几个原料提供点,如果中国的顾客...

    杨小杰

扫码关注腾讯云开发者

领取腾讯云代金券