初学工厂模式与抽象工厂模式代码

工厂模式

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值