简单工厂并不属于23种GOF设计模式之一,在学习其它模式之前,我们有必要了解下,这些简单的工厂模式。
简单工厂模式分为3种:
一、普通工厂模式:
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
java例子:
//接口Car
public interface Car {
public void drive();
}
//实现类Maserati
public class Maserati implements Car{
@Override
public void drive() {
System.out.println("今天开Maserati");
}
}
//实现类Mercedes
public class Mercedes implements Car{
@Override
public void drive() {
System.out.println("今天开Mercedes");
}
}
//工厂类CarFactory
public class CarFactory {
public Car chose(String type){
if("Mercedes".equals(type)){
return new Mercedes();
}else if("Maserati".equals(type)){
return new Maserati();
}else{
System.out.println("今天没车可开");
return null;
}
}
}
//测试类FactoryTest
public class FactoryTest {
public static void main(String[] args){
CarFactory factory = new CarFactory();
Car car = factory.chose("Mercedes");
car.drive();
}
}
//测试结果
今天开Mercedes
二、多个工厂方法模式
是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的类型出错,则不能正确的创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
java例子:
//工厂类CarFactory
public class CarFactory {
public Car choseMercedes(){
return new Mercedes();
}
public Car choseMaserati(){
return new Maserati();
}
}
//测试类
public class FactoryTest {
public static void main(String[] args){
CarFactory factory = new CarFactory();
Car car = factory.choseMaserati();
car.drive();
}
}
//测试结果
今天开Maserati
三、静态工厂方法模式
将上面的多个工厂方法模式里的方法设置为静态的,不需要创建实例,直接调用。
java例子:
//工厂类CarFactory
public class CarFactory {
public static Car choseMercedes(){
return new Mercedes();
}
public static Car choseMaserati(){
return new Maserati();
}
}
//测试类FactoryTest
public class FactoryTest {
public static void main(String[] args){
Car car = CarFactory.choseMercedes();
car.drive();
}
}
//测试结果
今天开Mercedes
总结:
- 以上三种模式中,第一种如果传入的字符串有误,则不能正确的创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选择第三种:静态方法模式。
- spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一标识来获得bean对象。