简单工厂模式的简单应用:
问题:
一个农场公式专门负责培育各种水果,在这个系统中的水果有葡萄,香蕉和橘子,其类图如图所示。
请应用简单工厂模式,在主程序中根据键盘输入的水果名称来完成其生长状态描述。
类图如下:
一:java工程目录结构:
二:各个类的代码:
SimpleFactory类:
package factory;
public class SimpleFactory {
public static Fruit getFruitObj(String fruitType){
Fruit obj = null;
if(fruitType.equals("Apple")){
obj = (Fruit) new Apple();
}else if (fruitType.equals("Orange")) {
obj=(Fruit) new Orange();
}else if (fruitType.equals("Banana")) {
obj=(Fruit) new Banana();
}
return obj;
}
Fruit接口:
package factory;
public interface Fruit {
void plant(); //定义种植方法
void grow(); //定义生长方法
void harvest(); //定义收获方法
}
Apple类,Orange和Banana类雷同 ,只列出Apple类。
package factory;
public class Apple implements Fruit {
@Override
public void plant() {
// TODO Auto-generated method stub
System.out.println("面积:种植量达到10万亩地!");
}
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println("生长:受大雨天气影响,生长形势不容乐观");
}
@Override
public void harvest() {
// TODO Auto-generated method stub
System.out.println("收获:早熟苹果已经结果!");
}
}
Main主函数
package factory;
import java.util.Scanner;
public class Main {
// 定义全局共享变量
private static String fruitName;
public static void main(String[] args) {
// TODO Auto-generated method stub
userInput();
try {
Fruit fruit = SimpleFactory.getFruitObj(fruitName.toString());
System.out.println("当前查询的是:" + fruitName);
fruit.plant();
fruit.grow();
fruit.harvest();
} catch (Exception e) {
// TODO Auto-generated catch block
// 这里是避免控制台报空指针错误。
// e.printStackTrace();
}
}
private static String userInput() {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.println("请用户输入查询的水果名字序号:\n" + " 1:Apple\n" + " 2:Banana\n" + " 3:Orange");
String fruitNumber = scanner.nextLine();
// (便于用户输入方便,这里选用输入数字,其实可以直接输水果名字)
try {
int number = 0;
number = Integer.parseInt(fruitNumber);//判断是否输入的是数字。
switch (number) {
case 1:
fruitName = "Apple";
break;
case 2:
fruitName = "Banana";
break;
case 3:
fruitName = "Orange";
break;
default:
System.out.println("没有找到对应的水果,请重新检查输入!!!");
break;
}
} catch (NumberFormatException e1) {
// TODO Auto-generated catch block
// 这里避免用户输入的不是数字(例如字母,汉子时)报错。
System.out.println("输入错误,请重新输入!!!");
}
return fruitName;
}
}
运行结果:
以上就是对简单工厂模式的简单应用了。
详细可看:https://my.oschina.net/kakoi/blog/519294