八吨车 记录所学,在校大二,软件工程,欢迎一起交流

工厂模式及在源码中的实践

工厂模式在\(\color{red}{接口}\)\(\color{red}{抽象方法}\)中定义了创建对象的方法,而将具体的创建对象的过程在\(\color{red}{子类}\)中实现,用户只需通过接口创建需要的对象即可,不用关注对象的具体创建过程。工厂模式本质上就是用工厂方法代替new操作创建一种实例化对象的不同方法。

先来看类图
在这里插入图片描述
具体代码:
Video类(产品)

public abstract class Video {
    public abstract void produce();
}

JavaVideo类(具体产品)

public class JavaVideo extends Video {
    @Override
    public void produce() {
        System.out.println("录制Java课程视频");
    }
}

PythonVideo类(具体产品)

public class PythonVideo extends Video {
    @Override
    public void produce() {
        System.out.println("录制Python课程视频");
    }
}

VideoFactory类(创建者抽象类)

public abstract class VideoFactory {
    public abstract Video getVideo();
}

JavaVideoFactory(具体的创建者)

public class JavaVideoFactory extends VideoFactory {
    @Override
    public Video getVideo() {
        return new JavaVideo();
    }
}

PythonVideoFactory(具体的创建者)

public class PythonVideoFactory extends VideoFactory {
    @Override
    public Video getVideo() {
        return new PythonVideo();
    }
}

在这里插入图片描述
假如现在需要扩展CVideo的方法,那么不用修改原来的类,扩展Video的子类和VideoFactory的子类即可
在这里插入图片描述

下面来看下在源码中工厂模式的实现:
在Collection接口中定义了Iterator工厂方法,其有很多的实现类
在这里插入图片描述
例如在ArrayList的iterator方法,就是用了工厂模式,在这里
Collection就是一个抽象工厂(相当于VideoFactory)
ArrayList就是一个具体的实现工厂(相当于JavaVideoFactory)
Iterator就是一个抽象产品(相当于Video)
Itr就是一个具体的产品(相当于JavaVideo)
在这里插入图片描述
再来看看URLStreamHandlerFactory,也是用了工厂模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
URLStreamHandlerFactory是一个抽象工厂(相当于VideoFactory)
其实现方法交给它的子类Factory内部类来实现
Factory是一个具体的实现工厂(相当于是JavaVideoFactory)
URLStreamHandler是一个抽象产品(相当于Video)
Handler类是一个具体的产品(相当于JavaVideo)

在ILoggerFactory接口中也一样,具体就不分析了,和上面的异曲同工
在这里插入图片描述
在这里插入图片描述

posted @ 2020-05-22 22:27  八吨车  阅读(247)  评论(0编辑  收藏  举报