JAVA设计模式——抽象工厂模式案例实现

Posted 北溟溟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA设计模式——抽象工厂模式案例实现相关的知识,希望对你有一定的参考价值。

前言

抽象工厂模式是进一步对简单工厂模式和工厂方法模式的整合,针对的是一个产品族对象的创建,客户端通过创建一个产品族对象的实例,从而减少工厂类和具体产品类的添加。缺点是产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的工厂和抽象产品里加代码,又要在具体的实现类里面添加。我们以腾讯和阿里发送消息和支付这俩种场景实现一个具体的抽象工厂设计模式案例。其类图如下:

正文

①创建一个发送消息接口

package com.yundi.atp.dp.factory.abs;

/**
 * @Author: 北溟溟
 * @Description: 消息类接口
 * @Date: 2022/3/13 9:54
 * @Version: 1.0.0
 */
public interface IMessage 
    /**
     * 定义一个sayHello接口
     *
     * @param name :用户
     */
    void sayHello(String name);


②创建发送消息的接口实现

  • 微信方式
package com.yundi.atp.dp.factory.abs;

/**
 * @Author: 北溟溟
 * @Description:
 * @Date: 2022/3/13 9:56
 * @Version: 1.0.0
 */
public class WeChatMessage implements IMessage 
    @Override
    public void sayHello(String name) 
        System.out.println("微信方式: " + name + " say hello!");
    


  • 钉钉方式
package com.yundi.atp.dp.factory.abs;

/**
 * @Author: 北溟溟
 * @Description:
 * @Date: 2022/3/13 9:56
 * @Version: 1.0.0
 */
public class DingdingMessage implements IMessage 
    @Override
    public void sayHello(String name) 
        System.out.println("钉钉方式: " + name + " say hello!");
    


③创建一个支付接口

package com.yundi.atp.dp.factory.abs;

import java.math.BigDecimal;

/**
 * @Author: 北溟溟
 * @Description: 支付接口
 * @Date: 2022/3/16 8:19
 * @Version: 1.0.0
 */
public interface IPay 
    /**
     * 支付金额
     *
     * @param amount 金额
     */
    void payAmount(BigDecimal amount);


④创建支付接口实现

  • 微信支付
package com.yundi.atp.dp.factory.abs;

import java.math.BigDecimal;

/**
 * @Author: 北溟溟
 * @Description: 微信支付
 * @Date: 2022/3/16 8:20
 * @Version: 1.0.0
 */
public class WeChatPay implements IPay
    @Override
    public void payAmount(BigDecimal amount) 
        System.out.println("使用微信支付:" + amount + "元给商家!");
    


  • 支付宝支付
package com.yundi.atp.dp.factory.abs;

import java.math.BigDecimal;

/**
 * @Author: 北溟溟
 * @Description: 支付宝支付
 * @Date: 2022/3/16 8:20
 * @Version: 1.0.0
 */
public class ZhifubaoPay implements IPay 
    @Override
    public void payAmount(BigDecimal amount) 
        System.out.println("使用支付宝支付:" + amount + "元给商家!");
    


⑤创建应用工厂接口

package com.yundi.atp.dp.factory.abs;

/**
 * @Author: 北溟溟
 * @Description: 应用工厂接口类
 * @Date: 2022/3/16 8:25
 * @Version: 1.0.0
 */
public interface AppFactory 
    /**
     * 创建消息的工厂接口
     *
     * @return
     */
    IMessage createMessage();


    /**
     * 创建支付的工厂接口
     *
     * @return
     */
    IPay createPay();


⑥创建工厂实现类

  • 腾讯工厂类
package com.yundi.atp.dp.factory.abs;

/**
 * @Author: 北溟溟
 * @Description: 腾讯工厂类
 * @Date: 2022/3/16 8:29
 * @Version: 1.0.0
 */
public class TencentFactory implements AppFactory 
    @Override
    public IMessage createMessage() 
        return new WeChatMessage();
    

    @Override
    public IPay createPay() 
        return new WeChatPay();
    


  • 阿里巴巴工厂类
package com.yundi.atp.dp.factory.abs;

/**
 * @Author: 北溟溟
 * @Description: 阿里巴巴应用工厂类
 * @Date: 2022/3/16 8:30
 * @Version: 1.0.0
 */
public class AlibabaFactory implements AppFactory 
    @Override
    public IMessage createMessage() 
        return new DingdingMessage();
    

    @Override
    public IPay createPay() 
        return new ZhifubaoPay();
    


⑦客户端验证

package com.yundi.atp.dp.factory.abs;

import java.math.BigDecimal;

/**
 * @Author: 北溟溟
 * @Description:
 * @Date: 2022/3/16 8:32
 * @Version: 1.0.0
 */
public class Client 

    public static void main(String[] args) 
        TencentFactory tencentFactory = new TencentFactory();
        IMessage message = tencentFactory.createMessage();
        message.sayHello("tom");
        IPay pay = tencentFactory.createPay();
        pay.payAmount(new BigDecimal("1232.00"));
        System.out.println("======================================");
        AlibabaFactory alibabaFactory = new AlibabaFactory();
        IMessage alibabaMessage = alibabaFactory.createMessage();
        alibabaMessage.sayHello("jim");
        IPay alipay = alibabaFactory.createPay();
        alipay.payAmount(new BigDecimal("1458.00"));
    

结语

关于抽象工厂设计模式案例的实现到这里就结束了,我们下期见。。。

以上是关于JAVA设计模式——抽象工厂模式案例实现的主要内容,如果未能解决你的问题,请参考以下文章

JAVA设计模式--抽象工厂模式

设计模式抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )

Java设计模式——抽象工厂模式

设计模式01 创建型模式 - 抽象工厂

java设计模式-----3抽象工厂模式

完整案例分析再加知识整合——艾特抽象工厂模式,超详细的