三种工厂模式的使用场景与区别
-
简单工厂模式:类只有一种分类方式,且在对象的创建逻辑不复杂时。
-
普通工厂模式:类只有一种分类方式,且在对象的创建逻辑复杂时(封装特性:隐藏对象创建的代码实现)。
-
抽象工厂模式:类有多种分类方式时。如,一辆汽车,它由这些零件组成:轮胎、底盘、车架、车窗,但是这些组件可能有多个品牌,我们可以按零件种类分类,也可以按零件品牌分类
代码实现
简单工厂
public class CarFactory{
public Components createComponents(String componentsName) {
if("tire".equals(componentsName)) {
return new Tire();
} else if("chassis".equals(componentsName)) {
return new Chassis();
} else if("frame".equals(componentsName)) {
return new Frame();
} else if("carWindow".equals(componentsName)) {
return new CarWindow();
}
return null;
}
}
普通工厂
public interface ComponentsFactory{
ComponentsFactory createComponents();
}
public class TireFactory implements{
ComponentsFactory createComponents(){return new Tire()};
}
public class ChassisFactory implements{
ComponentsFactory createComponents(){return new Chassis()};
}
public class FrameFactory implements{
ComponentsFactory createComponents(){return new Frame()};
}
public class CarWindowFactory implements{
ComponentsFactory createComponents(){return new CarWindow()};
}
抽象工厂
public interface ComponentsFactory{
ComponentsFactory createTire();
ComponentsFactory createChassis();
ComponentsFactory createFrame();
ComponentsFactory createCarWindow();
}
public class AudiComponentsFactory implements ComponentsFactory{
ComponentsFactory createTire(){return new Tire()};
ComponentsFactory createChassis(){return new Chassis()};
ComponentsFactory createFrame(){return new Frame()};
ComponentsFactory createCarWindow(){return new CarWindow()};
}
public class BMWComponentsFactory implements ComponentsFactory{
ComponentsFactory createTire(){return new Tire()};
ComponentsFactory createChassis(){return new Chassis()};
ComponentsFactory createFrame(){return new Frame()};
ComponentsFactory createCarWindow(){return new CarWindow()};
}