工厂模式
OfferFactory工厂类
public class OfferFactory {
private final int DefaultOfferIndex = 0;
private final int HwOfferIndex = 1;
private final int ZjOfferIndex = 2;
private final int AlOfferIndex = 3;
public OfferGrant GenerateOffer(int index) {
if (DefaultOfferIndex == index) {
return null;
}
else if (HwOfferIndex == index) {
return new HwOffer();
}
else if (ZjOfferIndex == index) {
return new ZjOffer();
}
else if (AlOfferIndex == index) {
return new AlOffer();
}
else {
throw new RuntimeException("参数异常");
}
}
}
OfferGrant Offer发放接口
public interface OfferGrant {
/**
* 发放order
*/
void sendOffer();
}
AlOffer Offer发放接口实现类
public class AlOffer implements OfferGrant {
private final Logger logger = LoggerFactory.getLogger(AlOffer.class);
@Override
public void sendOffer() {
logger.info("你获取的offer是:[{}]","AL");
}
}
HwOffer Offer发放接口实现类
public class HwOffer implements OfferGrant {
private final Logger logger = LoggerFactory.getLogger(HwOffer.class);
@Override
public void sendOffer() {
logger.info("你获取的offer是:[{}]","HW");
}
}
ZjOffer Offer发放接口实现类
public class ZjOffer implements OfferGrant {
private final Logger logger = LoggerFactory.getLogger(ZjOffer.class);
@Override
public void sendOffer() {
logger.info("你获取的offer是:[{}]","ZJ");
}
}
测试类
public class FactoryTest {
@Test
public void GenerateOfferTest() throws Exception{
OfferFactory factory = new OfferFactory();
OfferGrant HwOffer = factory.GenerateOffer(1);
HwOffer.sendOffer();
OfferGrant ZjOffer = factory.GenerateOffer(2);
ZjOffer.sendOffer();
OfferGrant AlOffer = factory.GenerateOffer(3);
AlOffer.sendOffer();
OfferGrant offer = factory.GenerateOffer(4);
offer.sendOffer();
}
}
日志输出
11:25:53.755 [main] INFO com.example.factoryDesign.Impl.HwOffer - 你获取的offer是:[HW]
11:25:53.758 [main] INFO com.example.factoryDesign.Impl.ZjOffer - 你获取的offer是:[ZJ]
11:25:53.759 [main] INFO com.example.factoryDesign.Impl.AlOffer - 你获取的offer是:[AL]
java.lang.RuntimeException: 参数异常
抽象工厂模式
抽象工厂角色类
public interface AbstractCompanyFactory {
/**
* Java offer
*/
JavaOffer sentJavaOffer();
/**
* Python offer
*/
PythonOffer sentPythonOffer();
}
抽象产品角色类
public interface Offer {
/**
* offer salary
*/
void getSalary();
/**
* offer name
*/
void getName();
}
具体工厂角色
public class AlCompanyFactory implements AbstractCompanyFactory {
private final Logger logger = LoggerFactory.getLogger(AlCompanyFactory.class);
@Override
public JavaOffer sentJavaOffer() {
logger.info("您获取的OFFER为[{}]公司的[{}]职位","AL","JAVA");
return new JavaOffer();
}
@Override
public PythonOffer sentPythonOffer() {
logger.info("您获取的OFFER为[{}]公司的[{}]职位","AL","PYTHON");
return new PythonOffer();
}
}
public class HwCompanyFactory implements AbstractCompanyFactory {
private final Logger logger = LoggerFactory.getLogger(HwCompanyFactory.class);
@Override
public JavaOffer sentJavaOffer() {
logger.info("您获取的OFFER为[{}]公司的[{}]职位","HW","JAVA");
return new JavaOffer();
}
@Override
public PythonOffer sentPythonOffer() {
logger.info("您获取的OFFER为[{}]公司的[{}]职位","HW","PYTHON");
return new PythonOffer();
}
}
具体产品角色
public class JavaOffer implements Offer {
private final Logger logger = LoggerFactory.getLogger(JavaOffer.class);
@Override
public void getSalary() {
logger.info("薪水为10K");
}
@Override
public void getName() {
logger.info("职位名称为JAVA");
}
}
public class PythonOffer implements Offer {
private final Logger logger = LoggerFactory.getLogger(PythonOffer.class);
@Override
public void getSalary() {
logger.info("薪水为11K");
}
@Override
public void getName() {
logger.info("职位名称为PYTHON");
}
}
测试类
public class AbstractFactoryTest {
private final Logger logger = LoggerFactory.getLogger(AbstractFactoryTest.class);
@Test
public void GenerateOfferTest() {
AbstractCompanyFactory HwFactory = new HwCompanyFactory();
Offer HwOffer = HwFactory.sentJavaOffer();
HwOffer.getName();
HwOffer.getSalary();
logger.info("-------------------");
AbstractCompanyFactory AlFactory = new AlCompanyFactory();
Offer AlOffer = AlFactory.sentPythonOffer();
AlOffer.getName();
AlOffer.getSalary();
}
}
日志输出
11:30:45.587 [main] INFO com.example.abstractFactoryDesign.Impl.HwCompanyFactory - 您获取的OFFER为[HW]公司的[JAVA]职位
11:30:45.590 [main] INFO com.example.abstractFactoryDesign.Impl.JavaOffer - 职位名称为JAVA
11:30:45.590 [main] INFO com.example.abstractFactoryDesign.Impl.JavaOffer - 薪水为10K
11:30:45.590 [main] INFO com.example.AbstractFactoryTest - -------------------
11:30:45.591 [main] INFO com.example.abstractFactoryDesign.Impl.AlCompanyFactory - 您获取的OFFER为[AL]公司的[PYTHON]职位
11:30:45.591 [main] INFO com.example.abstractFactoryDesign.Impl.PythonOffer - 职位名称为PYTHON
11:30:45.591 [main] INFO com.example.abstractFactoryDesign.Impl.PythonOffer - 薪水为11K