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

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

程序员文章站 2022-05-15 13:33:26
一、基本概念 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 或者说引入工厂模式的目的就是我们需要多个工厂,但是 ......

一、基本概念

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

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

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

 

二、结构

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

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

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

 

三、案例

案例,模拟需要生成中国食物a,中国食物b,美国食物a,美国食物b。

代码逻辑结构图:

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

 

基本结构图:

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

 

先给出这些食物(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