我们以去肯德基吃饭来模拟工厂模式,肯地基就好比一个工厂,加工各种食物。
先需要一个Food的接口:
/**
* 食物
*
* @author: wangmingxin1
* @create: 2018-10-31 12:37
**/
public interface Food {
void info();
}
需要不同的食物实现这个接口:
汉堡:
/**
* @author: wangmingxin1
* @create: 2018-10-31 12:38
**/
public class Hamburger implements Food {
@Override
public void info() {
System.out.println("汉堡:15元");
}
}
薯条:
/**
* @author: wangmingxin1
* @create: 2018-10-31 12:39
**/
public class FrenchFries implements Food{
@Override
public void info() {
System.out.println("薯条:12元");
}
}
可乐:
/**
* @author: wangmingxin1
* @create: 2018-10-31 12:40
**/
public class Coke implements Food {
@Override
public void info() {
System.out.println("可乐:10元");
}
}
需要制作这些食物的工厂 肯德基
/**肯德基
* 制作食物的工厂
*
* @author: wangmingxin1
* @create: 2018-10-31 12:41
**/
public class KFC {
//c 是顾客指定要哪种类型的食物
public static Food createFood(Class c) throws Exception {
Food food = null;
food= (Food) Class.forName(c.getName()).newInstance();
return food;
}
}
顾客类 main方法,调用工厂方法
/**
* 顾客点餐
*
* @author: wangmingxin1
* @create: 2018-10-31 12:44
**/
public class Customer {
public static void main(String[] args) throws Exception {
//一个饥饿的大叔来到KFC 一顿猛点
//先来个汉堡
Food hamburger = KFC.createFood(Hamburger.class);
hamburger.info();
//没吃饱,再来包薯条
Food frenchFries = KFC.createFood(FrenchFries.class);
frenchFries.info();
//再来杯可乐,美滋滋
Food coke = KFC.createFood(Coke.class);
coke.info();
System.out.println("吃饱喝足,溜了 ...");
}
}
运行结果:
最后附上代码地址:https://github.com/xinyeshuaiqi/DesignPattern/tree/master/src/pers/wmx/factorymethod
说点什么
您将是第一位评论人!