【GoF 23】篇2:工厂方法

1. 什么是工厂方法?

工厂方法类似简单工厂,只不过将对象实例化延迟到了子类来实现。

工厂方法定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类。

在父类不知道具体实现的情况下,完成自身功能的调用;而具体的实现延迟到子类来实现。符合依赖倒置原则。依赖倒置原则告诉莪们“要依赖抽象,不要依赖具体类”,简单来说就是:不能让高层组件依赖于低层组件,而且不管高层组件还是低层组件都应该依赖于抽象。

2. 代码示例

定义一个创建对象的接口:

// 创建对象的接口
public interface Product {...}

定义接口实现类

// Product实现类
public class ProductImpl implements Product{...}

定义创建对象类,一般为抽象类,该类就是工厂方法

//工厂方法,用于创建对象,但是不直接在这里创建,而是延迟到子类创建
public abstract calss ProductCreator {
	// 创建对象的抽象方法,可以添加参数,用简单工厂的思维让子类选择实例化哪个类
	protected abstract Product factoryMethod();
}

在抽象类子类中创建接口对象

public class ProductCreatorImpl extends ProductCreator  {
	protected Product factoryMethod(){
		return new ProductImpl();//创建Product实例
	}
}

从代码可以看出,我们并没有在工厂方法中直接创建对象,而是将其延迟到了,子类来创建。工厂类只是定义了一些功能,并没有提供具体的实现,正好满足抽象类的条件,因而定义为一个抽象类。

3. 优点

  • 可以在不知道具体实现的情况下编程
    • 工厂方法可以在你实现功能的时候,如果需要某个产品对象,只需要使用产品接口即可,而无需关心具体的实现。具体的实现业务延迟到子类去实现。
  • 更容易扩展对象的新版本
    • 工厂方法给子类提供了一个挂钩(也就是钩子方法hook,这里是指构造器,在模板方法里会详细讲解),使得扩展新的对象变得非常容易。

4. 缺点

对象和工厂方法具有耦合性:
在工厂方法中,创建对象需要选择具体的产品对象,并为其创建实例,因此对象和工厂方法是耦合的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CODER-V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值