栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

简单工厂模式【设计模式】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简单工厂模式【设计模式】

文章目录
  • 工厂模式
    • 简单工厂模式
      • 第一种方式:
      • 第二种方式
      • 第三种方式

工厂模式

工厂模式专门负责将大量由共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。

  • 简单工厂模式(Simple Factory)模式:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出哪种产品类的实例

  • 工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式

  • 抽象工厂(Abstract Factory)模式:又称工具箱(Kit或Toolkit)模式

简单工厂模式

假设目前有课程模块,包括Java课程,python课程,我们需要对不同用户创建不同的课程,甚至以后可能加入人工智能课程大数据等等,要求可扩展性

代码实现

第一种方式:

1.创建JavaCourse类

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

2.创建Python课程类

public class PythonCourse {
    public void record() {
        System.out.println("录制Python课程");
    }
}

3.测试

public class Test {
    public static void main(String[] args) {
        JavaCourse() java = new JavaCourse();
        PythonCourse() python = new PythonCourse();
        java.record(); //录制Java课程
        python.record(); //录制Python课程
    }
}   
第二种方式

1.创建Course接口类,将录制课程定为抽象方法

public interface Course {
    
    void record();
}

2.让JavaCourse和PythonCourse实现Course接口

public class JavaCourse implements Course{
    @Override
    public void record() {
        System.out.println("录制Java课程");
    }
}
public class PythonCourse implements Course{
    @Override
    public void record() {
        System.out.println("录制Python课程");
    }
}

3.测试

public class Test {
    public static void main(String[] args) {
        Course java = new JavaCourse();
        Course python = new PythonCourse();
        java.record();
        python.record();
        //录制Java课程
        //录制Python课程
    }
}
第三种方式

1.创建工厂

public class CourseFactory {

    
    public static Course create(String courseName) {
        if ("java".equals(courseName)) {
            return new JavaCourse();
        }else if ("python".equals(courseName)) {
            return new PythonCourse();
        }else {
            return null;
        }
    }

    
    public static Course create1(String className) {
        try {
            if (!(className == null || "".equals(className))) {
                return (Course) Class.forName(className).newInstance();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    
    public static Course create2(Class clazz) {
        try{
            if (clazz != null) {
                return clazz.newInstance();
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

2.测试

public class Test {
    public static void main(String[] args) {
        //工厂1.0
        Course python = CourseFactory.create("python");
        python.record();//录制Python课程
        Course java = CourseFactory.create("java");
        java.record();//录制Java课程
        Course ai = CourseFactory.create("ai");
        ai.record();//NullPointerException

        //工厂2.0
        Course course = CourseFactory.create1("simplefactory.JavaCourse");
        course.record();
        //工厂3.0
        Course course1 = CourseFactory.create2(JavaCourse.class);
        course1.record();
    }
}

类图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988756.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号