简单工厂模式
以小汽车为例实现简单工厂模式
定义小汽车的接口,由于工厂模式仅关系对象的创建,所以无需定义具体方法。
package com.xzy.simpleFactory;
public interface ICar {
//定义小汽车接口
}
package com.xzy.simpleFactory;
public class UpCar implements ICar {
//高档汽车的实现
}
package com.xzy.simpleFactory;
public class MidCar implements ICar {
//中档汽车的实现
}
package com.xzy.simpleFactory;
public class DownCar implements ICar {
//低档汽车的具体实现
}
创建小汽车的工厂,用于创建三种小汽车
package com.xzy.simpleFactory;
public class CarSimpleFactory {
public static final String UPTYPE = "uptype";
public static final String MIDTYPE = "midtype";
public static final String DOWNTYPE = "downtype";
public static ICar create(String type) {
ICar obj = null;
if (type.equals(UPTYPE)) {
//创建高档汽车
obj = new UpCar();
}else if(type.equals(MIDTYPE)){
//创建中等汽车
obj = new MidCar();
}else if(type.equals(DOWNTYPE)){
//创建低档汽车
obj = new DownCar();
}
//返回创建好的对象
return obj;
}
}
编写测试类进行测试
package com.xzy.simpleFactory;
import org.junit.Test;
public class SimpleFactoryTest {
@Test
public void test(){
//传入需要创建的对象类型
ICar car = CarSimpleFactory.create(CarSimpleFactory.MIDTYPE);
System.out.println(car.getClass());
}
}
运行结果不再展示。
简单工厂的特点
- 他是一个具的类,非接口或抽象类。
- 如要新增高档小汽车的类型,需要编写高档小汽车的实现,并且需要修改工厂类的create方法。
工厂模式
定义小汽车接口和三种小汽车的实现与简单工厂的定义相同。
定义抽象工厂
package com.xzy.Factory;
public abstract class AbstractFactory {
//定义抽象工厂,具有子工场的共同特性
public abstract ICar create();
}
定义具体的子工厂
package com.xzy.Factory;
public class UpFactory extends AbstractFactory {
@Override
public ICar create() {
return new UpCar();
}
}
*****************************************
package com.xzy.Factory;
public class MidFactory extends AbstractFactory {
@Override
public ICar create() {
return new MidCar();
}
}
******************************************
package com.xzy.Factory;
public class DownCarFactory extends AbstractFactory {
@Override
public ICar create() {
return new DownCar();
}
}
编写测试类
package com.xzy.Factory;
import org.junit.Test;
public class AbstractFactoryTest {
@Test
public void test(){
AbstractFactory obj = new UpFactory();
ICar car = obj.create();
System.out.println(car.getClass());
}
}
运行结果
class com.xzy.Factory.UpCar
Process finished with exit code 0
抽象工厂
- 一般来说,工厂模式,简单工厂是单产品系的,而抽象工厂是多产品系的。
- 从本质上来讲,抽象工厂,工厂模式是统一的。