1.普通工厂
通过定义公共接口创建公共规范,通过给工厂类的方法(通常是静态方法,所以也叫静态工厂)传不同的参数,实现创建不同的对象
简单实现
- 定义车接口
public interface Car {
void name();
}
- 定义BWN类实现Car接口,重新name方法
public class BWM implements Car{
@Override
public void name() {
// TODO Auto-generated method stub
System.out.println("bwm");
}
}
- 定义Tesla类实现Car接口,重写name方法
public class Tesla implements Car{
@Override
public void name() {
// TODO Auto-generated method stub
System.out.println("Tesla");
}
}
- 定义车工厂类CarFactory,通过传入不同的参数(调不同的构造函数) 创建相应得对象
public class CarFactory {
public static Car getCar(String carString) {
if (carString.equals("Tesla")) {
return new Tesla();
}
else if (carString.equals("BWM")) {
return new BWM();
}
else {
return null;
}
//第二种实现
public static Car getBWN(){
return new BWM();
}
public static Car getTesla(){
return new Tesla();
}
}
}
- 测试,通过工厂创建tesla与bwn
public class Consumer {
public static void main(String[] args) {
Car tesla = CarFactory.getCar("Tesla");
Car bwm = CarFactory.getCar("BWM");
tesla.name();
bwm.name();
}
}
- 结果
小结
优点:
- 逻辑简单,实现难度低
- 只需要传入相应的参数给工厂类即可创建对应的对象
- 将对象实现与使用分离,减小耦合
缺点:
- 不符合开闭原则,增加功能必须修改代码
- 在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护
适用场景:
-
工厂方法中的业务逻辑简单,工厂类负责创建的对象比较少
-
业务稳定的场景,不太需要增加其他业务