概念
简单工厂模式又称之为静态工厂方法(Static Factory Method), 属于创建型模式。简单工厂模式是根据传递的参数不同, 返回不同实现类的实例对象.(这些类都依赖一个父类或接口)
实现方式
我们先简单的来看看简单工厂模式的组成:
- 工厂类角色(Factory): 工厂类是工厂模式的最重要的组成部分. 向外提供一个创建方法,该方法会根据传递的参数来返回对应的实现类的实例对象。
- 抽象产品角色(abstract product): 工厂角色生产的所有对象都需要依赖此抽象。一般通过接口或者抽象类来实现.
- 具体产品实现角色(real product): 具体的产品实现,依赖抽象角色.由工厂角色来创建
工厂类
/**
* 专门用来创建车辆的工厂类
* @author yuxuan
*/
public class SimpleCarFactory {
public static Car createCar(String color) {
Car car = null;
switch (color) {
case "red":
car = new RedCar();
break;
case "black":
car = new BlackCar();
break;
}
return car;
}
}
抽象Car类
/**
* 专门用来创建车辆的工厂类
* @author yuxuan
*/
public class SimpleCarFactory {
public static Car createCar(String color) {
Car car = null;
switch (color) {
case "red":
car = new RedCar();
break;
case "black":
car = new BlackCar();
break;
}
return car;
}
}
Car实现类
/**
* 红色车辆实现类
* @author yuxuan
*/
public class RedCar extends Car{
@Override
public void sprayPaint() {
System.out.println("red car");
}
}
/**
* 黑色车辆实现类
* @author yuxuan
*/
public class BlackCar extends Car{
@Override
public void sprayPaint() {
System.out.println("black car");
}
}
简单工厂模式的优缺点
优点
- 明确了各自的职责和权利,有利于整个软件体系结构的优化
- 使用方无须知道创建类的过程,只需要提供对应的参数即可.
缺点
- 由于工厂集中了所有对象的创建逻辑,一旦工厂出了问题,就会导致整个系统受到影响.
- 系统扩展受限,一旦添加新的对象就需要修改工厂逻辑,在对象类型过多时,势必会导致工厂逻辑过于复杂和臃肿,不利于系统的扩展和维护
总结
- 简单工厂的好处就在于你需要什么,只需要传递一个规则内的参数,就可以获取到所需要的对象.
- 简单工厂的核心理念就是把对象的创建和对象的使用分离开来.为此当对象类型过多时势必会导致创建环节的臃肿