Java简单工厂模式

简单工厂模式的简单应用:

问题:

一个农场公式专门负责培育各种水果,在这个系统中的水果有葡萄,香蕉和橘子,其类图如图所示。

请应用简单工厂模式,在主程序中根据键盘输入的水果名称来完成其生长状态描述。

类图如下:



一: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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值