设计模式之工厂模式

什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就工厂模式简要概述。

什么是工厂模式
工厂模式是一种创建型设计模式,它提供了创建对象的最佳方式。使用者不用关心工厂内部如何生产对象,只需要调用即可。

小试牛刀
我们需要创建一个公司工厂,调用者可以直接通过工厂拿到具体的分公司,并执行分公司的具体方法。
调用关系图如下:
在这里插入图片描述

1、创建公司接口

/**
 * 公司接口
 * @author senfel
 * @version 1.0
 * @date 2022/8/8 9:36
 */
public interface CompanyService {

    /**
     * 雇佣员工
     */
    void employUsers();
}

2、创建北京、成都、南充子公司并实现公司接口

/**
 * 北京公司
 * @author senfel
 * @version 1.0
 * @date 2022/8/8 9:41
 */
@Service
@Slf4j
public class BeijingCompanyServiceImpl implements CompanyService {

    @Override
    public void employUsers() {
        log.error("this is a beijing company employ");
    }
}
/**
 * 成都公司
 * @author senfel
 * @version 1.0
 * @date 2022/8/8 9:43
 */
@Service
@Slf4j
public class ChengduCompanyServiceImpl implements CompanyService {
    @Override
    public void employUsers() {
        log.error("this is a chengdu company employ");
    }
}
/**
 * 南充公司
 * @author senfel
 * @version 1.0
 * @date 2022/8/8 9:43
 */
@Service
@Slf4j
public class NanchongCompanyServiceImpl implements CompanyService {
    @Override
    public void employUsers() {
        log.error("this is a nanchong company employ");
    }
}

3、创建工厂类,构造方法传入子公司名称,并提供创建返回子公司方法

/**
 * 公司工程
 * @author senfel
 * @version 1.0
 * @date 2022/8/8 9:45
 */
public class CompanyFactory {
    /**
     * 公司名称标识
     */
    public static final String BEIJING_COMPANY = "BEIJING_COMPANY";
    public static final String CHENGDU_COMPANY = "CHENGDU_COMPANY";
    public static final String NENCHONG_COMPANY = "NENCHONG_COMPANY";

    /**
     * 公司名称
     */
    private String companyName;


    public CompanyFactory(String companyName) {
        this.companyName = companyName;
    }

    /**
     * 获取公司对象
     * @return
     */
    public CompanyService getCompany(){
        switch (companyName) {
            case BEIJING_COMPANY:
                return new BeijingCompanyServiceImpl();
            case CHENGDU_COMPANY:
                return new ChengduCompanyServiceImpl();
            default:
                return new NanchongCompanyServiceImpl();
        }
    }
}

4、测试通过工厂直接获取子公司并调用具体的子公司招聘方法

/**
 * 工厂模式测试类
 * @author senfel
 * @version 1.0
 * @date 2022/8/8 9:54
 */
@SpringBootTest
public class TestFactoryModel {

    @Test
    public void testFun(){
        //获取工厂并调用招聘方法
        new CompanyFactory(CompanyFactory.BEIJING_COMPANY).getCompany().employUsers();
        new CompanyFactory(CompanyFactory.CHENGDU_COMPANY).getCompany().employUsers();
        new CompanyFactory(CompanyFactory.NENCHONG_COMPANY).getCompany().employUsers();

    }
}

结果如下:
2022-08-08 09:57:10.567 ERROR 56724 — [ main]
p.i.t.s.impl.BeijingCompanyServiceImpl : this is a beijing company employ
2022-08-08 09:57:10.567 ERROR 56724 — [ main]
p.i.t.s.impl.ChengduCompanyServiceImpl : this is a chengdu company employ
2022-08-08 09:57:10.567 ERROR 56724 — [ main]
p.i.t.s.impl.NanchongCompanyServiceImpl : this is a nanchong company employ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小沈同学呀

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值