定义
工厂方法模式是指定义一个创建对象的接口,然后实现这个接口的工厂来决定创建什么样的实例。工厂方法让类的实例推迟到子类中进行。在这个模式中,只关心需要创建的是什么工厂,不需要关心创建的细节。而且新加入的产品符合开闭原则。
举例
场景
有一个支付场景,支付的方式有多种,微信支付,阿里支付,银联支付。如何实现工厂方法模式。
步骤
- 创建支付接口,里面定义抽象的支付方法。
package com.gupao.vip.pay.factorymethod;
public interface IPay {
void pay();
}- 创建工厂接口,提供创建的方法,返回支付接口。
package com.gupao.vip.pay.factorymethod;
public interface IPayFactory {
IPay create();
}- 创建具体的支付类,AliPay,WechatPay,实现IPay接口,重写支付方法。
package com.gupao.vip.pay.factorymethod;
public class AliPay implements IPay {
@Override
public void pay() {
System.out.println("用支付宝支付");
}
}package com.gupao.vip.pay.factorymethod;
public class WechatPay implements IPay {
@Override
public void pay() {
System.out.println("用微信支付");
}
}
- 创建微信支付和阿里支付的工厂类,继承抽象工厂,重写抽象工厂的create方法,返回具体的支付类。
package com.gupao.vip.pay.factorymethod;
public class AliPayFactory implements IPayFactory {
@Override
public IPay create() {
return new AliPay();
}
}package com.gupao.vip.pay.factorymethod;
public class WechatPayFactory implements IPayFactory {
@Override
public IPay create() {
return new WechatPay();
}
}- 在客服端创建所需要的阿里支付和微信支付的工厂,然后由工厂来创建具体的支付类,然后就可以调用各自的支付方法了。
package com.gupao.vip.pay.factorymethod;
public class Test {
public static void main(String[] args) {
IPayFactory aliPayFactory = new AliPayFactory();
IPay aliPay = aliPayFactory.create();
aliPay.pay();
IPayFactory wechatPayFactory = new WechatPayFactory();
IPay wwechatPay = wechatPayFactory.create();
wwechatPay.pay();
IPayFactory uniPayFactory = new UniPayFactory();
IPay uniPay = uniPayFactory.create();
uniPay.pay();
}
}总结
工厂方法模式只要解决了产品的扩展问题。在简单工厂中,如果在支付的同时需要加入其他的逻辑,而每个支付的逻辑都不一样,那么这个工厂的职责会变得非常的重。有点像万能工厂,不易于维护。而根据软件设计的单一职责原则,我们可以将工厂的职责拆分开来,专人干专事。阿里支付工厂就用来创建阿里支付,微信支付工厂就用来创建微信支付。
但同时这种设计模式也有它的缺点。它增加了类的创建个数,提升了系统的复杂度和可理解度。
所以,工厂方法模式适用的场景是:1.创建对象需要大量重复的代码。2.客服端(应用层)不依赖于产品的实例如何被创建。3.一个类是通过其子类来指定创建对象的。
6 条评论
果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
这篇文章如同一首动人的乐章,触动了读者内心深处的柔软。
韵律感强烈,朗读时如音乐流淌。
在畅想未来时需警惕乌托邦式理想化。