什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就工厂模式简要概述。
什么是工厂模式
工厂模式是一种创建型设计模式,它提供了创建对象的最佳方式。使用者不用关心工厂内部如何生产对象,只需要调用即可。
小试牛刀
我们需要创建一个公司工厂,调用者可以直接通过工厂拿到具体的分公司,并执行分公司的具体方法。
调用关系图如下:
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