[design pattern](4) SImple Factory

前言

本博客主要介绍简单工厂模式(Simple Factory),简单工厂模式是建立型模式的一员,也是咱们平时coding用到的比较多的一个模式了。java

思考题

首先,让咱们思考如下的需求:ide

博主,忽然很想吃宫保鸡丁和西红柿炒鸡蛋,那么博主的需求怎样才能获得知足呢?

 

当咱们没有修炼过 简单工厂模式 这本秘籍,我会本身动手作:学习

首先我会上百度搜索到制做那两个菜的方法:测试

KungPaoChicken.java:spa

public class KungPaoChicken {
    private String name = "宫保鸡丁";

    @Override
    public String toString() {
        return name;
    }
}

 

TomatoEgg.javacode

public class TomatoEgg {
    private String name = "西红柿炒鸡蛋";

    @Override
    public String toString() {
        return name;
    }
}

 

而后我开始制做这两个菜:对象

Custom.javablog

public class Custom {
    public static void main(String... args) {
        KungPaoChicken kungPaoChicken = new KungPaoChicken();
        TomatoEgg tomatoEgg = new TomatoEgg();

        System.out.println(kungPaoChicken);
        System.out.println(tomatoEgg);
    }
}

 

全部的东西都是咱们本身去操做。继承

下面咱们给出了上面的代码的uml类图:博客

简单工厂模式(Simple Factory)

定义:提供一个建立对象实例的功能,而无需用户本身去建立,无需关注具体实现。

类图:

 

上面的类途中一共有三个角色:

  • 抽象产品(Product):负责抽象出一类产品的行为,全部的产品都须要实现这个行为,使工厂可使用这个类来引用子类的实例。
  • 工厂(Factory):负责实例化产品,并返回父类的引用给用户。将用户和产品的具体实现分离。
  • 具体产品(Concrete):产品的具体实现,不一样的产品有不一样的实现,可是他们都要继承抽象产品。

重构思考

经过简单工厂的学习,博主忽然想去开一个饭店,这样顾客只须要付钱而且点菜就能够吃到想吃的菜了,想一想是否是很方便。

首先,咱们须要一个 抽象产品 :

Food.java:

public interface Food {
    void eat();
}

 

而后, 具体的产品 :

KungPaoChicken.java:

public class KungPaoChicken implements Food {
    @Override
    public void eat() {
        System.out.println("吃宫保鸡丁");
    }
}

 

TomatoEgg.java:

public class TomatoEgg implements Food {
    @Override
    public void eat() {
        System.out.println("吃西红柿");
    }
}

 

最后,咱们建立工厂:

MyHotal.java:

public class MyHotal {
    public Food createFood(String foodName) {
        switch(foodName) {
        case "KungPaoChicken":
            return new KungPaoChicken();
        case "TomatoEgg":
            return new TomatoEgg();
        default:
            return null;
    }
    }
}

 

 

那么咱们来测试一下:

Custom.java:

public class Custom {
    public static void main(String ...args) {
        MyHotal myHotal = new MyHotal();
    Food kungPaoChicken = myHotal.createFood("KungPaoChicken");
    Food tomatoEgg = myHotal.createFood("TomatoEgg");

    kungPaoChicken.eat();
    tomatoEgg.eat();
    }
}
相关文章
相关标签/搜索