signed

QiShunwang

“诚信为本、客户至上”

java设计模式一一工厂模式

2020/12/27 0:18:31   来源:

java设计模式一一工厂模式

    • 1、什么是工厂模式
    • 2、工厂模式的作用
    • 3、工厂模式优缺点
    • 4、代码示例
      • 4.1-公共支付接口
      • 4.2-每个不同的支付类
      • 4.3-支付工厂类
      • 4.4-测试类
    • 5、测试

1、什么是工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

2、工厂模式的作用

1、工厂模式是为了解耦
	把对象的创建和使用的过程分开。就是class A 调用 class B,那么只是调用B的方法,而至于B的实例化就交给工厂类
2、工厂模式可以降低代码的重复
	如果创建class B的过程很复杂,需要一定的代码量,而且很多地方都需要用到,那么就会用重复的代码。可以把这些创建对象B的代码放到工厂里统一管理。即减少了代码业方便以后的维护。
3、工厂模式可以减少错误
	因为工厂管理对象的创建逻辑,使用者不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建导致的错误。

工厂模式可以分为:简单工厂,工厂方法,抽象工厂,静态工厂模式

3、工厂模式优缺点

**优点:**
	 1、一个调用者想创建一个对象,只要知道其名称就可以了。 
	 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
	 3、屏蔽产品的具体实现,调用者只关心产品的接口。
 **缺点:**
 	每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

4、代码示例

4.1-公共支付接口

@Component
public interface PaymentService {
    public void pay();
}

4.2-每个不同的支付类

public class AliPaySercice implements PaymentService {
    @Override
    public void pay() {
        System.out.println("阿里支付对象...");
    }
}

public class WeChatService implements PaymentService {
    @Override
    public void pay() {
        System.out.println("微信支付对象...");
    }
}

4.3-支付工厂类

class PayMentFactory {
    public PaymentService getPaymentService(String payType) {
        PaymentService paymentService = null;
        switch (payType) {
            case "ali_pay":
                paymentService = new AliPaySercice();
                break;
            case "wechat_pay":
                paymentService = new WeChatService();
                break;
        }
        return paymentService;
    }
}

4.4-测试类

public class PayMentFactoryTest {
    public static void main(String[] args) {
        PayMentFactory payMentFactory = new PayMentFactory();
        PaymentService ali_pay = payMentFactory.getPaymentService("ali_pay");
        ali_pay.pay();

        PaymentService wechat_pay = payMentFactory.getPaymentService("wechat_pay");
        wechat_pay.pay();
    }
}

5、测试

在这里插入图片描述
github项目:java-design-pattern
【参考】:蚂蚁课堂、菜鸟教程