意图:定义一个创建对象的接口,让子类决定实例化哪一个类。Factory method使一个类的实例化延迟到了子类中。
参与者:
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。
优点:
可以使代码结构清晰,有效地封装变化。
对调用者屏蔽具体的产品类。
降低耦合度。
下面是一个汽车生产的例子:
interface Car {
publicvoidproductMethod();
}
class Bus implements Car {
publicvoid productMethod(){
System.out.println("产品");
}
}
interface CarFactory {
public Car createCar();
}
class BusFactory implements CarFactory {
public Car createCar() {
returnnew Bus();
}
}
publicclass Client {
publicstaticvoid main(String[] args){
CarFactory factory = new BusFactory ();
Car prodect = factory.createCar();
prodect.productMethod();
}
}