工厂模式的诞生
在某些情况下,我们在已知类型的情况下创建对象,比如Fruit和Apple,如果我们想获得水果类型的苹果类可以这样创建:
Fruit fruit=new Apple();
假设我们又需要获取Banana,那么改吗可以这样改写:
Fruit fruit=new Banana();
以上可以通过抽象类的实例化来获取不同的子类对象,但是这样存在几个问题:
1、违背了类的开闭原则。
2、违背了类单一职责原则。
于是,工厂模式应运而生,它通过新增一个新类来负责实例化Fruit对象。
工厂模式的实现
Fruit类
public abstract class Fruit {
}
Apple类
public class Apple extends Fruit {
}
Banana类
public class Banana extends Fruit {
}
Pear类
public class Pear extends Fruit {
}
FruitFactory类
public class FruitFactory {
public static Fruit create(Fruit type){
if(type.equals("Apple")){
return new Apple();
}
if(type.equals("Banana")){
return new Banana();
}
if(type.equals("Pear")){
return new Pear();
}
return null;
}
}
FruitFactory类负责Fruit类的实例化,符合单一职责原则,而且还减少了耦合性。