1、模式介绍:
工厂方法模式(pattern of factory method)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际创建对象的工作延迟到子类中,这样可以在不改变整体结构的情况下,通过子类来选择具体实现。工厂方法模型常用于需要不同条件创建不同对象的场景。
2、应用场景:
当一个类不知道它所必须创建的对象的类时。
当一个类希望由它的子类来指定它所创建的对象时。
当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化时。
3、优点:
符合开闭原则: 新增产品时,只需新增相应的工厂类和产品类,而无需修改已有的代码。
降低耦合度: 客户端只需关心所需要的产品对应的工厂,无需关心具体的产品实现细节。
易于扩展: 可以方便地添加新的产品类和对应的工厂类。
4、缺点:
类的个数增加: 每增加一个产品,就需要增加一个具体产品类和一个对应的工厂类,使得系统中类的个数成倍增加。
增加了系统的复杂度: 增加了系统的抽象性和理解难度。
5、代码实现:
/**
* 车间接口
*
* @author FM_南风
* @date 2024/6/22
*/
public interface FactoryMethodWorkshop {
// 生产方法
void produce();
}
/**
* 工厂车间A
*
* @author FM_南风
* @date 2024/6/22
*/
public class FactoryMethodWorkshopA implements FactoryMethodWorkshop {
@Override
public void produce() {
System.out.println("车间A生产A产品");
}
}
/**
* 工厂车间B
*
* @author FM_南风
* @date 2024/6/22
*/
public class FactoryMethodWorkshopB implements FactoryMethodWorkshop{
@Override
public void produce() {
System.out.println("车间B生产B产品");
}
}
/**
* 工厂接口
*
* @author FM_南风
* @date 2024/6/22
*/
public interface FactoryMethod {
FactoryMethodWorkshop product();
}
/**
* 工厂A
*
* @author FM_南风
* @date 2024/6/22
*/
public class FactoryMethodA implements FactoryMethod {
@Override
public FactoryMethodWorkshop product() {
return new FactoryMethodWorkshopA();
}
}
/**
* 工厂B
*
* @author FM_南风
* @date 2024/6/23
*/
public class FactoryMethodB implements FactoryMethod{
@Override
public FactoryMethodWorkshop product() {
return new FactoryMethodWorkshopB();
}
}
/**
* 应用
*
* @author FM_南风
* @date 2024/6/23
*/
public class FactoryMethodClient {
public static void main(String[] args) {
FactoryMethod factoryA = new FactoryMethodA();
FactoryMethodWorkshop productA = factoryA.product();
productA.produce();
FactoryMethod factoryB = new FactoryMethodB();
FactoryMethodWorkshop productB = factoryB.product();
productB.produce();
}
}