设计模式——工厂方法模式(Factory Method Pattern)

本文深入讲解工厂方法模式,包括模式定义、类图、代码实现及优缺点。此模式通过抽象工厂父类泛化各种工厂子类,使得每种工厂生产一种产品,新增产品时无需修改原有代码,仅需泛化新工厂子类,符合开闭原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模式定义

工厂方法模式(Factory Method Pattern):定义一个抽象工厂父类用于泛化各种工厂子类,通过各个工厂子类来实例化某一种具体产品类的模式。也称作虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式。

简单来说,工厂方法模式就是简单工厂模式的推广(之前博客提到简单工厂模式),区别在于简单工厂模式将所有产品由一个工厂负责,而工厂模式实现了工厂的泛化,让一个工厂生产一种产品,使得当有新的产品加入时无需修改原有工厂代码,只需泛化新的工厂子类即可,符合了“开闭原则”。

二、模式类图

在这里插入图片描述
抽象产品(Product)类
具体产品(ConcreteProductA & B)
抽象工厂(Factory)类
具体工厂(ConcreteFactoryA & B)

三、模式简要代码

abstract class Factory{
	//这里是抽象工厂类
	abstract public Product createProduct();
}

class ConcreteFactoryA extends Factory{
	//这里是具体工厂类
	public Product createProduct() { return new ConcreteProductA();}
}
class ConcreteFactoryB extends Factory{
	//注意返回类型
	public Product createProduct() { return new ConcreteProductB();}
}

abstract class Product{
	//这里是抽象产品类
	abstract public void Print();
}

class ConcreteProductA extends Product{
	//这里是具体产品类
	public void Print() { System.out.println("This is A");}
}
class ConcreteProductB extends Product{
	public void Print() {System.out.println("This is B");}
}

//主函数
public class Main {
	public static void main(String[] args) {
		Factory A = new ConcreteFactoryA();
		Factory B = new ConcreteFactoryB();
		
		Product pA = A.createProduct();
		Product pB = B.createProduct();
		
		pA.Print();
		pB.Print();
	}
}

四、模式优缺点

1.优点:增加新的产品类时无需修改现有系统。
2.缺点:增加新的产品类时需要增加新的工厂子类,增加系统的复杂性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值