什么是工厂设计模式:
工厂设计模式是为了解耦:把对象的创建和使用的过程分开。
工厂模式可以降低代码复用,比如举个例子,如果创建一个对象过程很复杂,需要一定的代码量,而且很多地方都需要用到这个对象,如果我们每用一次都创建一下这个对象,那么就会有很多的重复代码,我们可以把创建这个对象的代码放到工厂里面统一管理,既减少了重复的代码,也方便后续维护,工厂模式可以减少错误,因为工厂管理了对象的创建逻辑,使用者不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。
工厂模式可以分为简单工厂,工厂方法,抽象工厂,静态工厂
我们来实现一个例子:比如支付:
我们把支付的实现放到工厂里面去去管理:
定义一个共同方法:
public interface PayService {
/**
*支付方法
*/
public void pay();
}
定义具体实现:
public class AliService implements PayService {
/**
* 支付方法
*/
@Override
public void pay() {
System.out.println("阿里支付=======》》》》》》》》》");
}
}
public class WeChatService implements PayService {
/**
* 支付方法
*/
@Override
public void pay() {
System.out.println("微信支付====》》》》》》》》》");
}
}
public class XiaoMiService implements PayService {
/**
* 支付方法
*/
@Override
public void pay() {
System.out.println("小米支付===========》》》》》》》》》");
}
}
定义工厂方法:对象交由工厂管理
/**
* 工厂方法封装
*/
public class PayFactory {
public static PayService getPayService(String payType){
PayService payService = null;
switch (payType){
case "ali_pay":
payService = new AliService();
break;
case "wechat_pay":
payService = new WeChatService();
break;
case "xiaomi_pay":
payService = new XiaoMiService();
break;
}
return payService;
}
}
我们来测试下:
public class Demo1 {
public static void main(String[] args) {
PayService payService = PayFactory.getPayService("wechat_pay");
payService.pay();
}
}