简单工厂(Simple Factory)

简单工厂并不算23种基本设计模式,只是对程序功能的简单封装、解耦

参考如下代码:


public interface Employee {
    public void doJob();
}
public class Tester implements Employee {
    public void doJob() {
        System.out.println("test");
    }
}
public class Developer implements Employee {
    public void doJob() {
        System.out.println("code");
    }
}
public class Job {
    public void assignJob(String jobType){
        Employee e = null;
        if(jobType.equals("test"))
            e = new Tester();
        else if(jobType.equals("code"))
            e = new Developer();

        if(e != null)
            e.doJob();
    }
}

整个分配工作分为两步,首先找到一位员工,然后让这名员工工作

很现实的情况是如果公司增加一些岗位,比如增加一种新的员工类型:产品,即便整个分配工作的流程并没有变更,但是依然要对assignJob方法进行修改,因为assignJob方法中涉及到了寻找员工的具体细节(耦合度过高),那么我们可以改进一下

public class Job {
    public void assignJob(String jobType){
        Employee e = findEmployee(jobType);
        if(e != null)
            e.doJob();
    }
    
    private Employee findEmployee(String jobType){
        Employee e = null;
        if(jobType.equals("test"))
            e = new Tester();
        else if(jobType.equals("code"))
            e = new Developer();
        return e;
    }
}

无论增加多少种岗位,我们都不需要修改assignJob方法了(避免不必要的改动影响原有的业务流程),仅需要修改findEmployee方法

此时我们再考虑一下,工作不能主动去找员工,因此寻找员工显然不是工作类的固有职责(单一职责),因此findEmployee方法没必要放在Job类下,因此我们可以把findEmployee方法拿出来单独进行封装

public class EmployeeFactory {
    public static Employee findEmployee(String jobType){
        Employee e = null;
        if(jobType.equals("test"))
            e = new Tester();
        else if(jobType.equals("code"))
            e = new Developer();
        return e;
    }
}
public class Job {
    public void assignJob(String jobType){
        Employee e = EmployeeFactory.findEmployee(jobType);
        if(e != null)
            e.doJob();
    }
}

修改后的类之间关系图如下


Job类已经与具体的Employee类型解耦,但是并不是说这个耦合不存在了,只是从Job类转移至了EmployeeFactory类中,但是至少通过这个简单的封装,使得类的功能职责更加简单明,避免了需求变更(增加新的员工类型)对原有逻辑(分配工作)的影响

因此简单工厂的主要作用是使调用方与具体类之间解耦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值