(五)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"));
    }
}

客户端

结语

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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉害哥哥吖

您的支持是我创作下去的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值