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

前言

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

简单工厂模式

在这里插入图片描述

创建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();

    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值