本博客主要介绍简单工厂模式(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类图:博客
定义:提供一个建立对象实例的功能,而无需用户本身去建立,无需关注具体实现。
类图:
上面的类途中一共有三个角色:
经过简单工厂的学习,博主忽然想去开一个饭店,这样顾客只须要付钱而且点菜就能够吃到想吃的菜了,想一想是否是很方便。
首先,咱们须要一个 抽象产品 :
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(); } }