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

1、基本概念

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

或者说引入工厂模式的目的就是咱们须要多个工厂,可是每一个工厂内部又要划分状况,若是只用一个工厂的话,会产生多种复合的状况。分布式

好比说咱们有两个工厂,每一个工厂有3种状况,若是用简单工厂模式,要分为 3 * 2 = 6种状况,因此能够用工厂方法模式解决。ide

 

2、结构

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

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

 

3、案例

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

代码逻辑结构图:spa

 

基本结构图:code

 

先给出这些食物(Product):orm

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);
}

 

而后就是两个子工厂:blog

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
    }
}

 

4、总结

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

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

工厂方法模式退化后能够变得很像简单工厂模式。设想若是很是肯定一个系统只须要一个具体工厂类,那么不妨把抽象工厂类合并到具体工厂类中去。因为只有一个具体工厂类,因此不妨将工厂方法改成静态方法,这时候就获得了简单工厂模式。

 

免费Java高级资料须要本身领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q
相关文章
相关标签/搜索