工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。
目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。
工厂方法模式包含四个部分:
1.抽象产品:产品对象同一的基类,或者是同一的接口。
2.具体的产品:各个不同的实例对象类
3.抽象工厂:所有的子类工厂类的基类,或是同一的接口
4.具体的工厂子类:负责每个不同的产品对象的实际创建
具体的实例代码:
1.抽象的产品类:定义car 交通工具类下:
package factory.simple;
/**
* 抽象产品角色 交通工具接口
*
* @author lilin
*
*/
public interface Car {
/**
* 上班函数
*/
void gotowork();
}
2.定义实际的产品类,总共定义两个,bike 和bus 分别表示不同的交通工具类
package factory.simple;
/**
* 具体产品角色,自行车
*
* @author lilin
*
*/
public class Bike implements Car {
@Override
public void gotowork() {
System.out.println("骑自行车去上班!");
}
}
package factory.simple;
/**
* @author lilin
*
*/
public class Bus implements Car {
@Override
public void gotowork() {
System.out.println("坐公交车去上班!");
}
}
3.抽象的工厂接口定义如下:、
/**
*
*/
package factory.factory;
import factory.simple.Car;
/**
* @author lilin
*
*/
public interface ICarFactory {
/**
* 获取交通工具
*
* @return
*/
Car getCar();
}
4.具体的工厂子类,分别为每个具体的产品类创建不同的工厂子类:
/**
*
*/
package factory.factory;
import factory.simple.Bike;
import factory.simple.Car;
/**
* @author lilin
*
*/
public class BikeFactory implements ICarFactory {
@Override
public Car getCar() {
return new Bike();
}
}
/**
*
*/
package factory.factory;
import factory.simple.Bus;
import factory.simple.Car;
/**
* @author lilin
*
*/
public class BusFactory implements ICarFactory {
@Override
public Car getCar() {
return new Bus();
}
}
最后,使用简单的测试类,来验证下 不同的工厂能够产生不同的产品对象:测试类如下:
/**
*
*/
package factory.factory;
import org.testng.annotations.Test;
import factory.simple.Car;
/**
* @author lilin
*
*/
public class TestFactory {
@Test
public void test() {
ICarFactory factory = null;
// bike
factory = new BikeFactory();
Car bike = factory.getCar();
bike.gotowork();
// bus
factory = new BusFactory();
Car bus = factory.getCar();
bus.gotowork();
}
}
打印结果如下:
骑自行车去上班!
坐公交车去上班!
工厂模式,可以理解为:有了很多个工厂方法,自己需要哪一个产品,就调用当前产品的工厂方法,获取相应的具体实例。