本博客主要介绍简单工厂模式(Simple Factory),简单工厂模式是创建型模式的一员,也是我们平时coding用到的比较多的一个模式了。
首先,让我们思考以下的需求:
博主,突然很想吃宫保鸡丁和西红柿炒鸡蛋,那么博主的需求怎样才能得到满足呢?
当我们没有修炼过 简单工厂模式 这本秘籍,我会自己动手做:
首先我会上百度搜索到制作那两个菜的方法:
KungPaoChicken.java:
public class KungPaoChicken { private String name = "宫保鸡丁"; @Override public String toString() { return name; } }
TomatoEgg.java
public class TomatoEgg { private String name = "西红柿炒鸡蛋"; @Override public String toString() { return name; } }
然后我开始制作这两个菜:
Custom.java
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(); } }
[design pattern](4) SImple Factory
原文:https://www.cnblogs.com/cafebabe-yun/p/11390426.html