常用的设计模式(笔记)——工厂模式
2022-03-16 本文已影响0人
红鲤鱼与绿鲤鱼与驴与鱼
工厂模式在代码中很常见
简单工厂
比如我们现在有两种支付方式 微信支付、支付宝支付这两种,这样我们就能用工厂模式去创建我们需要的支付方式
/**
* 支付宝的支付方式
*/
public class AliPay {
public void pay(){
System.out.println("支付宝支付");
}
}
/**
* 微信的支付方式
*/
public class WeChatPay {
public void pay(){
System.out.println("微信支付");
}
}
有了上面两个支付方式,现在我们还少一个工厂,接下来创建一个工厂类
/**
* 生产支付式的工厂
*/
public class PayFactory {
/**
* 返回微信支付方式
*/
public WeChatPay createWechat() {
return new WeChatPay();
}
/**
* 返回支付宝支付方式
*/
public AliPay createAlipay() {
return new AliPay();
}
}
以上就是简单工厂,够简单吧。很明显现在的代码扩展性不是很好
抽象工厂
抽象工厂需要有哪些东西?
- 1、抽象工厂类
- 2、具体工厂类
- 3、抽象产品类
- 4、具体产品类
还是以上面支付方式为例,微信 和 支付宝 都有pay()方法,所以抽象产品类如下
public interface Pay {
void pay();
}
具体的产品类
/**
*具体的支付类——微信
*/
public class WechatPay implements Pay {
@Override
public void pay() {
System.out.println("微信支付");
}
}
/**
*具体的支付类——支付宝
*/
public class Alipay implements Pay {
@Override
public void pay() {
System.out.println("支付宝支付");
}
}
接下来是重点,抽象工厂类
/**
* 支付方式的抽象工厂
*/
public abstract class AbstractPayFactory {
/**
*创建微信支付方式
*/
public abstract Pay createWeChatPay();
/**
* 创建支付宝支付方式
*/
public abstract Pay createAlipay();
}
具体的工厂类
public class PayFactory extends AbstractPayFactory {
@Override
public Pay createWeChatPay() {
return new WechatPay();
}
@Override
public Pay createAlipay() {
return new Alipay();
}
}
使用方式如下:
public static void main(String[] args) {
PayFactory factory = new PayFactory();
Pay weChatPay = factory.createWeChatPay();
weChatPay.pay();
Pay alipay = factory.createAlipay();
alipay.pay();
}
}