工厂模式1-简单工厂模式

简单说,工厂和需要生产出来的对象只在生产的方法里有关联,但是每次新增新的实现类,需要修改工厂类的代码

定义课程ICourse接口

public interface ICourse {

    /**
     * 录制视频
     */
    void record();

}

定义ICourse两个实现类

public class JavaCourse implements ICourse {
    @Override
    public void record() {
        System.out.println("录制Java视频");
    }
}

public class PythonCourse implements ICourse {
    @Override
    public void record() {
        System.out.println("录制Python视频");
    }
}

定义工厂类

public class CourseFactory {

    /**
     * 普通工厂
     * 传入名字返回对象
     *
     * @param name 需要创建的类的名字
     * @return 没找到对应对象则返回null
     */
    public static ICourse create(String name) {
        if ("java".equals(name)) {
            return new JavaCourse();
        } else if ("python".equals(name)) {
            return new PythonCourse();
        } else {
            return null;
        }
    }

    /**
     * 进阶工厂2
     *
     * @param clazz 传入类文件
     * @return 对应对象
     */
    public static ICourse create2(Class<? extends ICourse> clazz) {
        if (clazz != null) {
            try {
                return clazz.newInstance();
            } catch (InstantiationException | IllegalAccessException e) {
                e.printStackTrace();
                System.out.println("CourseFactory获取对象失败");
            }
        }
        return null;
    }

}

具体使用


    @Test
    public void test2() {
        ICourse java = CourseFactory.create("java");
        assert java != null;
        java.record();
        ICourse python = CourseFactory.create("python");
        assert python != null;
        python.record();
    }

    @Test
    public void test3(){
        ICourse java = CourseFactory.create2(JavaCourse.class);
        java.record();
        ICourse python = CourseFactory.create2(PythonCourse.class);
        python.record();
    }

类关系

image.png

小结

简单工厂顾名思义很简单,看出来了吧,最终对外暴露的也就是一个工厂类,调用create方法就可以获得对应的实现类,缺点就在于新增一个实现类,就需要到工厂类中维护(不符合开闭原则);

具体使用

jdk中的Calendar.getInstance()方法以及logback的LoggerFactory.getLogger(String name)|(String clazz),都是简单工厂设计模式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计模式系列文章 1、概念描述 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 2、场景举例 马戏团有...
    Aaron任阅读 3,008评论 0 1
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 4,138评论 0 1
  • 早起看到凌晨还在写作业的小伙伴……她所经历的冲击,我亦很感触。 直到昨晚,所有的小师傅们一半以上仍在懵逼中……正如...
    夜的第七璋阅读 2,118评论 0 4
  • 我自我感觉是一个肯动脑筋的人,属于理智消费的一类。虽然这种理智,也是花重金买教训,用钱砸出来的。 刚开始学会网上购...
    云海白阅读 3,701评论 0 3
  • 窗外春暖花开,屋内时光温良。 我的心徜徉于春风又绿的江南岸,纯粹,清透,雀跃,欣喜。原来,真正的愉悦感莫过于触摸到...
    华德文化传播雨寒阅读 3,211评论 2 18

友情链接更多精彩内容