简介
1.学习本篇文章,了解简单工厂设计模式的使用场景。
2.如何使用简单工厂模式。
3.简单工厂模式能解决什么问题?
场景
现在有一家外卖小店需要从生产一份外卖开始进行考虑设计,当客户在网上点出不同味道的菜时,外卖小店就将按照不同的订单进行生产出菜品,然后进行打包、等待外卖小哥获取、赠送给客户等不同的几道工序,才算完成一单,但是后期由于生意很好,客户评价很高,有些地方的老板想加盟本店了,那么可能就会出现不同味道的菜单,还有一些本地的特色菜也会加上菜单,这时,客户就能点到更多的菜品了,为了达到某些商家快速而且合理的进行管理,你是怎么设计这个方案的呢?
分析
一般情况下客户点餐的时候,都会查看平分高低,还有出货次数,如果人气好的,肯定要大量生产,而没有人点的,则可以考虑去除,所以我们通过以上的考虑,需要封装创建对象的代码,如将生产商品的对象封装起来,这样,我们出掉或者添加的时候,都只修改这部分的代码,那么是哪个生产商品呢?答案肯定是店家了,所以我们称这个生产商品的店家为“工厂”。
接下来我们进行分析以上代码该如何展现出来呢?我们将通过两种方式来进行编写。
静态工厂模式
如何实现呢?我们先来看看本例的类图
![](https://i-blog.csdnimg.cn/blog_migrate/dac565b93bb0df0c6bb209c0ebd1b1fd.webp?x-image-process=image/format,png)
1.创建一个美食店,MealStore.class
/**
* Author Eirunye
* Created by on 2018/9/19.
* Describe
*/
public class MealStore {
public Meal submitOrderMeal(String type) {
Meal meal;
//利用静态工厂方法生成产品
//重点(静态工厂实现代码)
meal = SimpleMealsFactory.createMeal(type);
//以下方法是进行一些设计而已不是静态工厂方法的模块,是产品的一些操作而已,无关紧要的
//店家准备中...
meal.mealPreparation();
//打包
meal.bake();
//获取
meal.getMeal();
//配送
meal.send();
return meal;
}
}
2.创建一个静态工厂SimpleMealsFactory.class
/**
* Author Eirunye
* Created by on 2018/9/18.
* Describe 建立一个简单静态工厂,该工厂生产不同的菜品(美食)
* Tip: 提示:这是不是我们经常使用的Util类的编写方式?
*/
public class SimpleMealsFactory {
//将生产产品(美食放在这里)
public static Meal createMeal(String type) {
Meal meal = null;
if ("crayfish".equals(type)) {
meal = new CrayfishMeal(); //创建什么类型的产品(美食)让子类来操作
} else if ("roastChicken".equals(type)) {
meal = new RoastChicken();
} else if ("A".equals(type)) {
} else if ("B".equals(type)) {
}
// ...
return meal; //返回的是美食商品
}
}
3.创建产品美食抽象基类Meal.class
,这样的话我们就可以交给子类来完成商品的生产。