关于简单工厂模式工厂方法模式和抽象工厂模式的解析

Posted 前进道路上的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于简单工厂模式工厂方法模式和抽象工厂模式的解析相关的知识,希望对你有一定的参考价值。

文章目录

前言

简单工厂模式是由一个工厂对象来决定创建哪一种产品类的实例
工厂方法模式是特定类的工厂决定生产这个类的实例
抽象工厂模式是由工厂创建一系类的类
下面我们就用实际案例来具体解释

简单工厂模式

创建ICourse接口

在案例中我们新建ICourse接口,并且定义record方法
ICourse:

public interface ICourse 
    public void record();

实现ICourse接口

然后新建Java和Python课程实现这个接口
JavaCourse :

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

PythonCourse :

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

创建工厂类

最后我们在工厂类中根据传递进来的Class决定创建那个类的实例对象
CourseFactory :

public class CourseFactory 
    public ICourse create(Class<? extends ICourse> clazz) 
        try 
            if(clazz!=null) 
                return clazz.newInstance();
            
         catch (Exception e)
            e.printStackTrace();
        
        return null;
    

测试

我们测试一下:
Test:

public class Test 
    public static void main(String[] args) 
        CourseFactory cf = new CourseFactory();
        ICourse iCourse = cf.create(JavaCourse.class);
        iCourse.record();
    

工厂方法模式

工厂方法模式是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法模式让类的实例化推迟到子类中进行。

创建课程类接口

ICourse :

public interface ICourse 
    public void record();

创建具体实现课程类

JavaCourse:

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

PythonCourse :

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

创建工厂类接口

然后我们创建工厂类接口
ICourseFactory :

public interface ICourseFactory 
    ICourse create();

创建具体工厂类

具体工厂实现这个接口
JavaCourseFactory :

public class JavaCourseFactory implements ICourseFactory
    @Override
    public ICourse create() 
        return new JavaCourse();
    

PythonCourseFactory :

public class PythonCourseFactory implements ICourseFactory
    @Override
    public ICourse create() 
        return new PythonCourse();
    

测试

然后我们在测试类中进行测试
Test :

public class Test 
    public static void main(String[] args) 
        ICourseFactory icf = new JavaCourseFactory();
        ICourse iCourse = icf.create();
        iCourse.record();

        ICourseFactory picf = new PythonCourseFactory();
        ICourse pCourse = picf.create();
        pCourse.record();
    

抽象工厂模式

抽象工厂模式试纸提供一个创建一系列相关或相互依赖对象的接口,无需制定他们特定的类

创建笔记和视频接口

我们课程中需要有笔记和视频,所以新建笔记和视频的接口
INote :

public interface INote 
    void edit();

IVideo :

public interface IVideo 
    void record();

具体JAVA的笔记和视频

然后新建Java的笔记和视频类
JavaNote :

public class JavaNote implements INote 
    @Override
    public void edit() 
        System.out.println("编辑java笔记");
    

JavaVideo :

public class JavaVideo implements IVideo 
    @Override
    public void record() 
        System.out.println("录制java视频");
    

创建工厂类接口

我们创建工厂类接口,里面有创建笔记和视频的方法
CourseFactory :

public interface CourseFactory 
    INote createNote();
    IVideo createVideo();

Java课程工厂实现类

JavaCourseFactory :

public class JavaCourseFactory implements CourseFactory
    @Override
    public INote createNote() 
        return new JavaNote();
    
    @Override
    public IVideo createVideo() 
        return new JavaVideo();
    

测试

我们测试一下
Test :

public class Test 
    public static void main(String[] args) 
        JavaCourseFactory javaCourseFactory = new JavaCourseFactory();
        javaCourseFactory.createNote().edit();
        javaCourseFactory.createVideo().record();

    

以上是关于关于简单工厂模式工厂方法模式和抽象工厂模式的解析的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式,简单工厂模式,抽象工厂模式三者有啥区别

设计模式之工厂方法模式

Python设计模式:工厂方法模式

C#简单工厂模式和单列设计模式潜要解析

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录

设计模式——抽象工厂模式