设计模式-简单工厂模式

简单工厂模式不属于23种设计模式,是指一个工厂决定创建哪一种产品类的实例,简单工厂适用于需要创建的对象较少的情形,客户端只需要传工厂类的参数,不需要关心工厂创建对象的逻辑。下面我们以课程为例。

有一个ICource接口

public interface ICource {
    /**
     * 录制视频
     */
    void record();
}

接下来有JavaCource课程实现了ICource接口

public class JavaCource implements ICource {
    public void record() {
        System.out.println("录制Java课程");
    }
}

客户端代码

public class Test {
    public static void main(String[] args) {
       ICource cource = new JavaCource();
       cource.record();
    }

}

很显然,父类ICource接口指向了子类JavaCource引用,此时客户端依赖了JavaCource,随着业务的不断扩大,需要增加一门Python课程甚至更多,则此时客户端的依赖就会变得非常臃肿。那么有没有一种方法来降低这种依赖呢?答案是肯定的,那就是简单工厂模式,客户端只需要依赖工厂,不需要只要具体创建对象的细节。

CourceFactory

public class CourceFactory {
    static ICource create(String name){
        if(name.equals("Java")){
            return new JavaCource();
        }else if(name.equals("Python")){
            return new PythonCoure();
        }
        return null;
    }
}

客户端代码

public class Test {
    public static void main(String[] args) {
       ICource cource = CourceFactory.create("Java");
       cource.record();
    }

}

由上述客户端代码可知,客户端调用代码变得简单了很多,若需要扩展业务需求,每增加一类课程,则都需要修改CourceFactory中的create方法,不符合开闭原则,此时我们可以利用反射优化简单工厂的代码,如下:

public class CourceFactory {
    static ICource create(Class <? extends ICource> clazz){
        if(clazz != null){
            try {
                return clazz.newInstance();
            } catch (Exception e) {
                e.getCause();
                return null;
            }
        }
        return null;
    }
}

客户端代码:

public class CourceFactory {
    static ICource create(Class <? extends ICource> clazz){
        if(clazz != null){
            try {
                return clazz.newInstance();
            } catch (Exception e) {
                e.getCause();
                return null;
            }
        }
        return null;
    }
}

简单工厂模式也有一定的缺点,譬如:工厂类的任务过于繁重,不利于扩展,不符合单一职责原则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值