初探设计模式:简单工厂模式

简单工厂模式

业务场景:
单一接口,根据业务编码传参进行不同处理方式
少量业务编码基本都是用条件判断做一下简单处理,但考虑到业务后期发展,业务编码会越来越多,很容易出现 if else 嵌套地狱

这种情况,我们就考虑使用工厂模式来对业务代码进行拆分,使不同处理逻辑划分更清晰

一、创建业务接口,并定义一个业务实现方法

public interface BusinessService {

    /**
     * 业务应用
     */
    void use();
}

二、创建实现该接口的各个实现类

public class BusinessServiceOneImpl implements BusinessService {

    /**
     * 业务应用
     */
    @Override
    public void use() {
        System.out.println("业务处理方案一");
    }
}
public class BusinessServiceTwoImpl implements BusinessService {

    /**
     * 业务应用
     */
    @Override
    public void use() {
        System.out.println("业务处理方案二");
    }
}
public class BusinessServiceThreeImpl implements BusinessService {

    /**
     * 业务应用
     */
    @Override
    public void use() {
        System.out.println("业务处理方案三");
    }
}

三、创建一个业务工厂类

public class BusinessServiceFactory {

    public BusinessService getBusinessService(String businessCode) throws Exception {

        if (businessCode == null) {
            return null;
        }

        switch (businessCode) {
            case "000001":
                return new BusinessServiceOneImpl();
            case "000002":
                return new BusinessServiceTwoImpl();
            case "000003":
                return new BusinessServiceThreeImpl();
            default:
                throw new Exception("暂不支持此业务编码【"+businessCode+"】");
        }
    }
}

四、创建客户端,模拟业务请求

public class SimpleFactoryClient {

    /**
     * 服务消费者
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        use("000001");
        use("000002");
        use("000003");
        use("000004");
    }

    /**
     * 服务提供者
     * @param businessCode
     * @throws Exception
     */
    public static void use(String businessCode) throws Exception {
        BusinessServiceFactory factory = new BusinessServiceFactory();
        BusinessService service = factory.getBusinessService(businessCode);
        service.use();
    }
}

五、分析

优点:

解耦、方便调用者创建对象、扩展性好。

缺点:

每新增一个业务功能,就要加一个对应实现类、修改工厂类的出口方法。

这样会增加系统的复杂度,不利于维护。

posted @ 2022-01-10 14:50  努力的Daimon  阅读(50)  评论(0)    收藏  举报