美文网首页Java 杂谈Java总社区Java
结合案例写出工厂方法模式实例

结合案例写出工厂方法模式实例

作者: java劝退师图图 | 来源:发表于2019-06-22 14:54 被阅读1次

一、基本概念

工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中

或者说引入工厂模式的目的就是我们需要多个工厂,但是每个工厂内部又要划分情况,如果只用一个工厂的话,会产生多种复合的情况。

比如说我们有两个工厂,每个工厂有3种情况,如果用简单工厂模式,要分为 3 * 2 = 6种情况,所以可以用工厂方法模式解决。

二、结构

在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由大工厂的子类(或者实现类)来创建对象。

即上面有一个大工厂,下面是分类的工厂。

image

三、案例

案例,模拟需要生成中国食物A,中国食物B,美国食物A,美国食物B。

代码逻辑结构图:

image

基本结构图:

image

先给出这些食物(Product):

public interface Food {
}

public class AmericanFoodA implements Food {
}

public class AmericanFoodB implements Food {
}

public class ChineseFoodA implements Food {
}

public class ChineseFoodB implements Food {
}

然后是抽象工厂:

public interface FoodFactory {
    Food makeFood(String name);
}

然后就是两个子工厂:

public class ChineseFoodFactory implements FoodFactory {
    @Override
    public Food makeFood(String name) {
        if (name.equals("A")) {
            return new ChineseFoodA();
        } else if (name.equals("B")) {
            return new ChineseFoodB();
        } else {
            return null;
        }
    }
}
public class AmericanFoodFactory implements FoodFactory {
    @Override
    public Food makeFood(String name) {
        if (name.equals("A")) {
            return new AmericanFoodA();
        } else if (name.equals("B")) {
            return new AmericanFoodB();
        } else {
            return null;
        }
    }
}

最后测试:

public class MyTest {
    public static void main(String[] args) {
        // 先选择一个具体的工厂
        FoodFactory factory = new ChineseFoodFactory();

        // 由第一步的工厂产生具体的对象,不同的工厂造出不一样的对象
        Food food = factory.makeFood("A"); //  chineseFood * A
    }
}

四、总结

工厂方法模式和简单工厂模式在结构上的不同很明显。

工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上

工厂方法模式退化后可以变得很像简单工厂模式。设想如果非常确定一个系统只需要一个具体工厂类,那么不妨把抽象工厂类合并到具体工厂类中去。由于只有一个具体工厂类,所以不妨将工厂方法改为静态方法,这时候就得到了简单工厂模式。

免费Java高级资料需要自己领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q

相关文章

  • 结合案例写出工厂方法模式实例

    一、基本概念 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 工厂方法模式

    一、工厂方法模式介绍 二、工厂方法模式代码实例

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 1: 简单工厂模式

    一. 基本概念 定义 实例化对象,用工厂方法代替new操作 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是...

  • 简单工厂模式、工厂模式

    简单工厂模式类图 工厂方法模式类图 比较 简单工厂模式包含生成类实例的判断逻辑,工厂方法模式把判断...

  • Spring Bean的三种管理方式

    1.使用类构造器实例化(默认无参数) 2.使用静态工厂方法实例化(简单工厂模式) 3.使用实例工厂方法实例化(工厂...

  • 设计模式之工厂方法模式

    场景1: 场景2: 工厂模式的概念 实例化对象,用工厂方法代替 new 操作。工厂模式包括工厂方法模式和抽象工厂模...

  • 设计模式(1) 工厂方法模式

    创建型模式 简单工厂模式 工厂方法模式IOC与工厂方法模式的结合泛型工厂委托工厂 创建型模式 创建型模式可以隔离客...

  • 设计模式第三篇-创建型模式【工厂模式】

    设计模式案例分析-github 一、前言 工厂模式分为工厂方法(又称简单工厂)模式、抽象工厂模式。为方便讲解,工厂...

网友评论

    本文标题:结合案例写出工厂方法模式实例

    本文链接:https://www.haomeiwen.com/subject/prxvqctx.html