工厂模式(一)-----简单工厂------从java代码和图去理解

简单工厂模式

定义

通过一个Factory类获取在这个类下被定义的所有类,获取的类使用者无法看到如何实例化出来的
生活中举例:
客:我要买宝马!!!
商家:您买哪款???
客:我买宝马7系!!!

图解(UML图网上一大堆这里就放个我自己画的)

在这里插入图片描述

java代码

接口

/**
 * 汽车类
 * 工厂模式顶层接口
 * 生活中类似于 这款车的品牌是宝马
 * @author xiaokun
 */
public interface ICar {
	
}

枚举类

/**
 * 汽车型号枚举
 * 例如生活中  宝马6,7,8系
 * @author xiaokun
 */
public enum CarType {
	BMW6,
	BMW7,
	BMW8
}

实现类(工厂中的产品)

/**
 * BWM6
 * 宝马车的具体类型
 * @author xiaokun
 */
public class BMW6 implements ICar{
	public BMW6() {
		System.out.println("我选择了宝马6系");
	}
}

/**
 * BWM7
 * 宝马车的具体类型
 * @author xiaokun
 */
public class BMW7 implements ICar{

	public BMW7() {
		System.out.println("我选择了宝马7系");
	}
}

/**
 * BWM8
 * 宝马车的具体类型
 * @author xiaokun
 */
public class BMW8 implements ICar{
	public BMW8() {
		System.out.println("我选择了宝马8系");
	}
}

工厂类(列举了2种内部方式)

/**
 * 商家
 * 宝马汽车工厂类
 * @author xiaokun
 */
public class BMWCarFactoryBuilder {

	public static ICar BMWCarFactory(CarType ct)  {
		/*========================================
		 * 这是通过枚举方式获取所需要的对象
		switch (ct) {
		case BMW6: return new BMW6();
		case BMW7: return new BMW7();
		case BMW8: return new BMW8();
		default: return null;
		}
		===============================================*/
		//这里可以通过配置文件达到松耦合的获取对象,这里使用枚举模拟配置文件
		ICar car;
		try {
			car = (ICar) Class.forName("Factory.impl."+ct.name()).getConstructor().newInstance();
		} catch (Exception e) {
			return null;
		}
		return car;
	}
}

测试类

/**
 * 简单工厂测试类
 * @author xiaokun
 */
public class Test {

	public static void main(String[] args) throws Exception {
		//遍历枚举检查工厂类的情况
		for(CarType ct : CarType.values())
			BMWCarFactoryBuilder.BMWCarFactory(ct);
	}
}

测试结果

我选择了宝马6系
我选择了宝马7系
我选择了宝马8系
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章