工厂设计模式(Factory Pattern) (二)

2014-11-24 11:17:37 · 作者: · 浏览: 7
arFactory {
public static Car buildCar(CarType model) {
Car car = null;
switch (model) {
case SMALL:
car = new SmallCar();
break;

case SEDAN:
car = new SedanCar();
break;

case LUXURY:
car = new LuxuryCar();
break;

default:
// throw some exception
break;
}
return car;
}
}

测试工厂类,单元测试如下:
[java]
public class CarFactoryTest {

@SuppressWarnings("deprecation")
@Test
public void testCarFactory() {
Assert.assertEquals(true, CarFactory.buildCar(CarType.SMALL) instanceof Car) ;
Assert.assertEquals(true, CarFactory.buildCar(CarType.SEDAN) instanceof Car) ;
Assert.assertEquals(true, CarFactory.buildCar(CarType.LUXURY) instanceof Car) ;
}
}

public class CarFactoryTest {

@SuppressWarnings("deprecation")
@Test
public void testCarFactory() {
Assert.assertEquals(true, CarFactory.buildCar(CarType.SMALL) instanceof Car) ;
Assert.assertEquals(true, CarFactory.buildCar(CarType.SEDAN) instanceof Car) ;
Assert.assertEquals(true, CarFactory.buildCar(CarType.LUXURY) instanceof Car) ;
}
}

输出结果如下:
[java]
Building small car
Building sedan car
Building luxury car

Building small car
Building sedan car
Building luxury car

工厂模式的使用场合:
1.创建相关的家族或是依赖对象,比如Kit.
2. 提供一个产品类库,显露接口,但是不包括实现。
3. 修要从超类哪里隔离具体的实现类.
4. 系统需要独立出系统的产品如何创建、组合和呈现。
如果你想做一深入的研究,可以查阅Java API代码.
java.sql.DriverManager#getConnection()
java.net.URL#openConnection()
java.lang.Class#newInstance()
java.lang.Class#forName()