- 1.描述
- 2.代码实现
工厂模式、Factory Pattern。是创建型设计模式的一种,在父类提供一个创建对象的方法,子类决定实例化对象的类型。
主要解决:接口选择的问题。
使用场景:明确地知道什么情况下创建什么样的实例。
举个栗子:Spring的BeanFactory、众多日志框架的LogFactory
优点:1.屏蔽了创建对象的细节,只需要用工厂类和类型就可以获取实例;2.方便扩展,在工厂类加类型就可以。
缺点:1.类型硬编码,没那么灵活,一定程度上增加了复杂性;2.增加产品过多,工厂类可能会比较臃肿。
2.代码实现我们有一个工厂,可以生产工具车。工具车包括坦克、拖拉机、货车。在不同情况下,我们需要不同的工具车。
我们先定义一下我们的工具车
/**
* 工具车接口
*
* @author 编程还未
*/
public interface ToolCar {
/**
* 跑起来
*/
void run();
}
接着定义我们的产品
坦克
/**
* 坦克
*
* @author 编程还未
*/
public class Tank implements ToolCar {
/**
* 跑起来
*/
@Override
public void run() {
System.out.println("tank running");
}
}
拖拉机
/**
* 拖拉机
*
* @author 编程还未
*/
public class Tractor implements ToolCar {
/**
* 跑起来
*/
@Override
public void run() {
System.out.println("tractor running");
}
}
货车
/**
* 货车
* @author 编程还未
*/
public class Truck implements ToolCar{
/**
* 跑起来
*/
@Override
public void run() {
System.out.println("truck running");
}
}
定义我们的工厂
/**
* 工具车工程
*
* 可以生产:坦克、拖拉机、货车
*
* @author 编程还未
*/
public class ToolCarFactory {
/**
* 生产工具车
*
* @param type 可以生产的类型
* @return 工具车
*/
public static ToolCar getToolCar(Type type) {
if (Type.TANK.equals(type)) {
return new Tank();
} else if (Type.TRACTOR.equals(type)) {
return new Tractor();
} else if (Type.TRUCK.equals(type)) {
return new Truck();
}
//未知的类型返回null
return null;
}
/**
* 可以生产的类型
*/
enum Type {
/**
* 坦克
*/
TANK,
/**
* 拖拉机
*/
TRACTOR,
/**
* 货车
*/
TRUCK;
}
}
测试一下我们工厂
/**
* 测试工厂
*
* @author 编程还未
*/
public class TestFactory {
public static void main(String[] args) {
//现在有情况,需要几辆坦克
ToolCar toolCar1=ToolCarFactory.getToolCar(ToolCarFactory.Type.TANK);
toolCar1.run();
//和平安定,需要拖拉机生产
ToolCar toolCar2=ToolCarFactory.getToolCar(ToolCarFactory.Type.TRACTOR);
toolCar2.run();
//大丰收,需要货车运送货物
ToolCar toolCar3=ToolCarFactory.getToolCar(ToolCarFactory.Type.TRUCK);
toolCar3.run();
}
}
运行结果如下
tank running
tractor running
truck running
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)