简单工厂模式
核心组成
- Factory:工厂类,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑
- IProduct:抽象产品类,简单工厂模式所创建的所有对象的父类,描述所有实例所共有的公共接口
- Product:具体产品类,是简单工厂模式的创建目标
优点:
- 将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。
缺点
- 工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背
- 即开闭原则(Open Close Principle)对扩展开放,对修改关闭,程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果
- 将会增加系统中类的个数,在一定程度上增加了系统的复杂度和理解难度,不利于系统的扩展和维护,创建简单对象就不用模式
代码示例:
支付接口
/**
* 支付接口
*/
public interface Pay {
/**
* 统一下单
*/
void unifiedorder();
}
支付宝支付
/**
* @ClassName AliPay
* @Description 支付宝支付
* @Author ninghq
* @Date 2020/11/15 13:19
* @Version 1.0.0
**/
public class AliPay implements Pay {
@Override
public void unifiedorder() {
System.out.println("支付宝统一支付");
}
}
微信支付
/**
* @ClassName WeChatPay
* @Description 微信支付
* @Author ninghq
* @Date 2020/11/15 13:25
* @Version 1.0.0
**/
public class WeChatPay implements Pay {
@Override
public void unifiedorder() {
System.out.println("微信统一支付");
}
}
支付工厂
/**
* @ClassName PayFactory
* @Description 支付工厂
* @Author ninghq
* @Date 2020/11/15 13:20
* @Version 1.0.0
**/
public class PayFactory {
public static Pay createPay(String type){
if(type.equalsIgnoreCase("ALI_PAY")){
return new AliPay();
} else if(type.equalsIgnoreCase("WECHATE_PAY")){
return new WeChatPay();
}
return null;
}
}
main函数主类
/**
* @ClassName PayMain
* @Description TODO
* @Author ninghq
* @Date 2020/11/15 13:23
* @Version 1.0.0
**/
public class PayMain {
public static void main(String[] args) {
PayFactory.createPay("WECHATE_PAY").unifiedorder();
PayFactory.createPay("ALI_PAY").unifiedorder();
}
}
Connected to the target VM, address: '127.0.0.1:17101', transport: 'socket'
微信统一支付
支付宝统一支付
Disconnected from the target VM, address: '127.0.0.1:17101', transport: 'socket'
Process finished with exit code 0