设计模式2--工厂方法模式(Factory Method)

本文深入探讨了工厂方法模式的本质及应用场景,对比了其与简单工厂模式的区别,强调了工厂方法模式通过延迟具体实现的选择,提高了系统的灵活性和可扩展性。

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

工厂方法模式的本质:延迟到子类来选择实现
package com;

public interface Api {
	void opreation(String s);
}
package com.impl;
import com.Api;
public class ImplA implements Api {

	@Override
	public void opreation(String s) {
		System.out.println("我是A的实现:" + s);
	}

}
package com.impl;
import com.Api;
public class ImplB implements Api {

	@Override
	public void opreation(String s) {
		System.out.println("我是B的实现:" + s);
	}

}
import com.Api;

public abstract class AbstractFactory {
	public void opreation(String s){
		Api api = factoryMethed();
		api.opreation(s);
	}
	
	protected abstract Api factoryMethed();
}
import com.Api;
import com.impl.ImplA;

public class FactoryA extends  AbstractFactory{
	
	protected Api factoryMethed(){
		return new ImplA();
	}
}
import com.Api;
import com.impl.ImplB;

public class FactoryB extends  AbstractFactory{
	
	protected Api factoryMethed(){
		return new ImplB();
	}
}
public class Client {
	public static void main(String[] args){
		AbstractFactory fA = new FactoryA();
		fA.opreation("SHIXIN");
		AbstractFactory fB = new FactoryB();
		fB.opreation("AXUE");
	}
}


从本质上讲,它们确实是非常类似的,在具体的实现上都是“选择实现”。但是也存在不同点,简单工厂是直接在工厂类里面进行“选择实现”;而工厂方法会把这个工作延迟大盘子类来实现,工厂类里面使用工厂方法的地方是依赖于抽象而不是具体的实现,从而使得系统更加灵活,具有更好的维护性和可扩展性。

从某个角度来讲,可以认为简单工厂就是工厂方法模式的一种特例,因此它们的本质是类似的,也就不足为奇了。

建议在以下情况中选用工厂方法模式:

1 如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况下可以选用工厂方法模式,把创建对象的工作延迟到子类去实现。

2 如果一个类本身就希望由他的子类来创建所需要的对象的时候,应该使用工厂方法模式。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值