设计模式之工厂模式一简单工厂模式

工厂模式由来:

在我们创建对象的时候使用,使用new操作的。如果多个对象创建都使用new会。所以工厂模式就是用来代理new操作的一种模式。根据工厂模式由来,我们可以看出工厂模式属于创建型模式。提供一种创建对象的最佳方式。

来源:凯哥Java(kaigejava)

工厂模式主要的分类:

设计模式之工厂模式一简单工厂模式_工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式:

简单工厂模式不属于23中设计模式。又叫做静态工厂方法,简单工厂模式是工厂模式家族中最简单使用的一种模式。也可以理解为不同工厂模式的一个特殊实现。

如何理解?

举例:一个工厂类,一个产品的抽象类。

现实生活举例:一个面馆,可以生产多中面条。

如:面馆里面可以做的西红柿鸡蛋面、牛肉拉面、刀削面、哨子面、biangbiang面及热干面。

我们就来模拟这种场景:

我们先来看项目结构:

设计模式之工厂模式一简单工厂模式_工厂模式_02


说明:

1:面条接口类

2:具体面条实现类

3:简单工厂类(面馆对象)

4:测试类型

我们先来看看面条接口类:

INoodlesInterface

设计模式之工厂模式一简单工厂模式_工厂模式_03

我们在来看看,面条具体实现类--西红柿鸡蛋面类对象里面:

public class TomatoAndEggNoodles implements INoodlesInterface {

   private String noodlesName;

   public TomatoAndEggNoodles(){}

   public TomatoAndEggNoodles(String noodlesName){

       this.noodlesName = noodlesName;

   }

   @Override

   public void noodlesdescription() {

       System.out.println("大爷,您的"+this.noodlesName+"价格为:10元。");

   }

}

设计模式之工厂模式一简单工厂模式_工厂类_04

其他具体面条实现类里面类似。这里就不一一贴出来了。

我们来看看面馆对象:

设计模式之工厂模式一简单工厂模式_工厂模式_05

里面由三部分:

菜单部分、根据菜单序号制作面条、根据面条名称制作面条。

我们来看看根据菜单序号制作面条的:

public  static INoodlesInterface makeNoodlesByMenuType(int noodletType){

   switch (noodletType){

       case NOODLES_TYPE_1:

           return new TomatoAndEggNoodles("西红柿鸡蛋面");

       case NOODLES_TYPE_2:

           return new HandPulledNoodleSoupWithBeef("牛肉拉面");

       case NOODLES_TYPE_3:

           return new HandPulledNoodleSoupWithBeef("刀削面");

       case NOODLES_TYPE_4:

           return new NoodleWithPork("哨子面");

       case NOODLES_TYPE_5:

           return  new BiangBiangNoodles("biangbiang面");

       case NOODLES_TYPE_6:

           return new HotAndDryNoodles("热干面");

       default:

           return  new HotAndDryNoodles("热干面");

   }

}

设计模式之工厂模式一简单工厂模式_工厂类_06

另一个方法类似。

查看测试类:

设计模式之工厂模式一简单工厂模式_工厂模式_07

查看运行结果:

设计模式之工厂模式一简单工厂模式_工厂模式_08

运行结果,达到我们预期的。

现在我们来总结下简单工厂模式:

简单工厂模式几个角色:

设计模式之工厂模式一简单工厂模式_工厂模式_09

1:共有的抽象父类或者接口。如:司小司面馆的面条接口对象

2:继承或是实现该接口的具体子类。如:西红柿鸡蛋面、biangbiang面等

3:创建对象的简单工厂类。如:司小司的面馆

触发事件:

设计模式之工厂模式一简单工厂模式_简单工厂模式_10

通过菜单的序号或者是面条名称触发工厂类制作对象的。

在来看看简单工厂模式特点:

设计模式之工厂模式一简单工厂模式_工厂模式_11

通过一个类。是具体的类,并非接口或者抽象类的一个重要的创建方法,利用if判断语句说着是switch语句来进行判断,进而创建对应的产品。

其中,这个重要的创建方法通常都是静态的。所以,简单工厂模式也被称之为静态工厂.