JAVA设计模式——简单工厂模式案例实现

Posted 北溟溟

tags:

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

前言

简单工厂模式是工厂模式的一种,又叫静态工厂模式。其通过专门定义一个工厂类来创建具有同一个父类的子类方法实例,通过静态方式创建子类对象实例。

正文

①创建一个发送消息的接口

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

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


②实现消息接口

微信方式实现sayHello

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

/**
 * @Author: 北溟溟
 * @Description:使用微信方式实现sayHello
 * @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!");
    


qq方式实现sayHello

package com.yundi.atp.dp.factory.simple;
/**
 * @Author: 北溟溟
 * @Description: qq方式实现sayHello
 * @Date: 2022/3/13 9:56
 * @Version: 1.0.0
 */
public class QqMessage implements IMessage 
    @Override
    public void sayHello(String name) 
        System.out.println("QQ方式: " + name + " say hello!");
    

钉钉方式实现sayHello

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

/**
 * @Author: 北溟溟
 * @Description:钉钉方式实现sayHello
 * @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.simple;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: 北溟溟
 * @Description: 工厂类
 * @Date: 2022/3/13 10:00
 * @Version: 1.0.0
 */
public class SayHelloFactory 
    private final static Map<String, Object> map = new HashMap<>();

    /**
     * 将接口定义的实现方式存储到map中,方便获取
     */
    static 
        map.put("wechat", new WeChatMessage());
        map.put("qq", new QqMessage());
        map.put("dingding", new DingdingMessage());
    

    /**
     * 通过类型获取工厂类实例
     * 注意:如果获取不到对应实例,要做空异常判断
     * @param type
     * @return
     */
    public static IMessage createSendMessage(String type) 
        return (IMessage) map.getOrDefault(type, null);
    

    //通过不同类型参数获取不同子类实例
    public static void main(String[] args) 
        IMessage wechat = SayHelloFactory.createSendMessage("wechat");
        wechat.sayHello("tom");
        IMessage qq = SayHelloFactory.createSendMessage("qq");
        qq.sayHello("jim");
        IMessage dingding = SayHelloFactory.createSendMessage("dingding");
        dingding.sayHello("jackson");
    


简单工厂类的优缺点及适用场景

优点

  • 简化了创建子类的过程,只关注使用,不用关注子类具体的业务逻辑
  • 便于扩展,简化了子类使用方式

缺点

  • 工厂类出现故障,导致所有子类实例业务逻辑不可使用
  • 创建或者删除子类,工厂类就要修改,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。不符合开闭原则。

适用场景

  • 创建子类对象比较固定,比较少,不会轻易变动。
  • 对于子类创建的过程不关心,只关注创建哪个子类实例对象的类型

结语

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

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

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

用java 编写程序写出简单的工厂模式?

带领大家一起进“厂”Java简单工厂+工厂方法+抽象工厂

带领大家一起进“厂”Java简单工厂+工厂方法+抽象工厂

Java实现factory抽象工厂设计模式的小案例

java简单工厂模式是啥