更多java文章与项目资源、毕业设计
工厂方法模式5-1工厂方法讲解
5-2工厂方法coding
5-3工厂方法源码解析(jdk+logback)
5-1工厂方法讲解5-2工厂方法coding业务场景和之前的简单工厂一样,我们直接对简单工厂里面的代码进行改造:
还是一样一个Video类
publicabstractclassVideo{publicabstractvoidproduct();}123Video类有两个子类:
把之前的工厂类改成一个抽象类,里面只留一个待实现的抽象方法:
publicabstractclassVideoFactory{publicabstractVideogetVideo();}123
产品等级和产品族是区分工厂方法和抽象方法的重要概念;
创建一个创建JavaVideoFactory的工厂类,继承于VideoFactory这个抽象类:
publicclassJavaVideoFactoryextsVideoFactory{@OverridepublicVideogetVideo(){returnnewJavaVideo();}}123456同理,我们再创建一个PythonVideoFactory的工厂类:
publicclassPythonVideoFactoryextsVideoFactory{@OverridepublicVideogetVideo(){returnnewPythonVideo();}}123456VideoFactory只定义一个默认的契约,具体创建哪一种对象由具体的子类工厂去实现:
测试如下:
publicclassTest{publicstaticvoidmain(String[]args){VideoFactoryvideoFactory=newJavaVideoFactory();Videovideo=();();}}1234567测试结果:
如果我们想要创建出PythonVideo的实例,那么我们就只需要把VideoFactory的实例指向PythonVideoFactory工厂就可以了:
publicclassTest{publicstaticvoidmain(String[]args){VideoFactoryvideoFactory=newPythonVideoFactory();Videovideo=();();}}1234567运行结果:
创建FEVideo:
创建一个创建FEVideo对象的工厂:
publicclassFEVideoFactoryextsVideoFactory{@OverridepublicVideogetVideo(){returnnewFEVideo();}}123456现在的类图:
这里引出产品组的概念:
这个概念有点拗口,抽象工厂就是解决产品族的问题;
5-3工厂方法源码解析(jdk+logback)
如ArrayList里面的iterator方法
又如:
URLStreamHandlerFactory:
这个是它的是一个实现:
我们要理解
抽象工厂,子类的具体实现的工厂
抽象产品,子类的具体的产品
把抽象方法交给子类来进行实现;





