简单工厂模式

设计模式 总目录

https://preparedata.blog.csdn.net/article/details/134512591

文章目录

    • [设计模式 总目录](#设计模式 总目录)
    • 一、案例
    • [二、抽象类 (订单抽象类)](#二、抽象类 (订单抽象类))
    • 三、实现类
        • [3.1 帽子订单](#3.1 帽子订单)
        • [3.2 鞋子订单](#3.2 鞋子订单)
    • 四、调用

一、案例

在的下单业务中,对于不同的类型的商品(鞋子、帽子),需要处理的下单业务,可能存在部分相同,部分不同

这时候可以利用简单工厂模式,依据不同的商品类型,调用不同的处理器,进行下单

1.定义 抽象类 AbstractOrder 定义声明下单方法, 实现公共下单逻辑; 提供获取对应商品类型的实例 HatOrder(帽子业务)ShoeOrder(鞋子业务)

2.定义 实现类 HatOrder(帽子)ShoeOrder(鞋子)继承AbstractOrder, 实现下单逻辑, 同时也可以调用父级AbstractOrder的公共方法

抽象类是一种特殊的接口

当商品类型更多的时候,添加实现类, 继承AbstractOrder,能够利用拆分不同的下单业务,约束接口, 抽取公共方法,统一参数等

个人理解,简单工厂目的在于业务执行器的选择,也就是if else 的升级版,比if else能够更好的解耦,也能约束后来开发人员的代码书写规范。

对于if else中嵌套if else,可以参考复杂工厂模式

二、抽象类 (订单抽象类)

java 复制代码
package com.pd.shopping.order.designPattern.factory;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author hll
 */
@Slf4j
@Component
public abstract class AbstractOrder {

    public static AbstractOrder getInstance(String orderType) {
        switch (orderType){
            case "shoe":
                //可以利用一些获取Bean的工具获取, 避免new
                //SpringApplicationUtil.getBean(ShoeOrder.class);
                return new ShoeOrder();
            case "hat":
                return new HatOrder();
            default:
                return null;

        }
    }

    /**
     * 创建订单
     * @param map
     */
    public abstract void create(Map<String,Object> map);


    /**
     * 查询
     * @param map
     */
    public abstract void query(Map<String,Object> map);


    /**
     * 公共方法
     */
    public void common(){
        log.debug("调用公共方法");
    }
}

三、实现类

3.1 帽子订单
java 复制代码
package com.pd.shopping.order.designPattern.factory;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author hll
 */
@Slf4j
@Component
public class HatOrder extends AbstractOrder{

    /**
     * 创建订单
     * @param map
     */
    @Override
    public void create(Map<String,Object> map){
        super.common();
        log.debug("创建帽子订单");
    }


    /**
     * 查询
     * @param map
     */
    @Override
    public void query(Map<String,Object> map){
        super.common();
        log.debug("创建帽子订单");
    }
}
3.2 鞋子订单
java 复制代码
package com.pd.shopping.order.designPattern.factory;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author hll
 */
@Slf4j
@Component
public class ShoeOrder extends AbstractOrder{

    /**
     * 创建订单
     * @param map
     */
    @Override
    public void create(Map<String,Object> map){
        super.common();
        log.debug("创建鞋子订单");
    }


    /**
     * 查询
     * @param map
     */
    @Override
    public void query(Map<String,Object> map){
        super.common();
        log.debug("查询鞋子订单");
    }
}

四、调用

java 复制代码
@GetMapping("/factoryOrder")
public void factoryOrder() {
    AbstractOrder.getInstance("shoe").create(new HashMap<>());
    AbstractOrder.getInstance("hat").query(new HashMap<>());
}
相关推荐
患得患失9498 天前
【设计模式】工厂模式详解-----简单工厂模式、工厂方法模式、抽象工厂模式
设计模式·简单工厂模式·工厂方法模式
智想天开14 天前
工厂方法模式、简单工厂模式与抽象工厂模式的对比
简单工厂模式·工厂方法模式·抽象工厂模式
Zijian/TENG19 天前
依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式
设计模式·设计原则·工厂模式·依赖注入·控制反转·依赖倒置
牵牛老人24 天前
C++设计模式-简单工厂模式:从原理、应用、实践指南与常见问题和解决方案深度解析
c++·设计模式·简单工厂模式
撒呼呼1 个月前
设计模式 - 工厂模式 精准梳理&精准记忆
java·设计模式·简单工厂模式·工厂方法模式·抽象工厂模式·设计规范
钰爱&1 个月前
【Qt】MVC设计模式
c++·qt·单例模式·设计模式·mvc·简单工厂模式
bing_1581 个月前
简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
spring boot·后端·简单工厂模式
TT-Kun1 个月前
设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)
设计模式·简单工厂模式·工厂方法模式
老朱佩琪!1 个月前
在Unity中用简单工厂模式模拟原神中的元素反应
unity·简单工厂模式
Cikiss2 个月前
「全网最细 + 实战源码案例」设计模式——简单工厂模式
java·后端·设计模式·简单工厂模式