一、适用场景工厂类负责创建较少的对象。应用层只知道传入工厂类的参数,并不关心如何创建对象,创建了谁的对象。2.优势只需要正确传入工厂就可以在不知道创建细节的情况下为我们创建对应的实例。3.缺点增加新产品时,需要修改代码,违反了开闭原则。4.Codingdemoversion4.1UML类图预览:1.AbstractclassvideopublicabstractclassVideo{/**创建学习视频*/publicabstractvoidproduce();}2.JavaVideo继承抽象类并实现抽象方法publicclassJavaVideoextendsVideo{@Overridepublicvoidproduce(){System.out.println("录制java学习视频");}}3.PythonVideo继承抽象类并实现抽象方法publicclassPythonVideoextendsVideo{@Overridepublicvoidproduce(){System.out.println("录制python学习视频");}}4。简单工厂类publicclassVideoFactory{publicVideogetVideo(StringvideoType){if("java".equalsIgnoreCase(videoType))returnnewJavaVideo();elseif("python".equalsIgnoreCase(videoType))返回新的PythonVideo();返回空值;}}5.测试类publicclassTest{publicstaticvoidmain(String[]args){VideoFactoryvideoFactory=newVideoFactory();视频java=videoFactory.getVideo(“爪哇”);java.produce();视频python=videoFactory.getVideo("python");蟒蛇生产();}}输出:在上面的代码结构中,我们使用了一个Factory类来帮助我们生产对应的实例,我们需要传入正确的参数,Factory就可以帮我们创建对应的实例。这就好比我们去咖啡店喝咖啡,只需要对服务员说:“我要一杯拿铁”,服务员就会自动端上Latte,不需要我们关心制作拿铁的步骤.4.2Version2我们发现在代码中硬编码相应的参数不符合代码规范,不方便维护。所以我们考虑使用反射来重构代码。publicclassVideoFactory{publicVideogetVideo(Classc){Videovideo=null;try{//Class.forName加载指定类video=(Video)Class.forName((c.getName())).newInstance();}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}返回视频;}}我们使用反射,根据传入的Class运行时类自动创建实例,既实现了相同的功能,又提高了代码质量。5.扩展简单工厂模式在源码中的体现5.1Calendar.class类图:我们在开发中经常会用到上面的方法。5.2在jdbc中使用回顾一下获取jdbc连接的三个步骤?publicclassMySqlConnectionTest{publicstaticvoidgetConnection(){Connectionconn=null;try{//注册数据库驱动程序Class.forName("com.mysql.jdbc.Driver");//数据库地址Stringurl="jdbc:mysql://localhost:3306/briup";//获取连接到数据库的Connection对象conn=DriverManager.getConnection(url,"root","root");System.out.println("数据库连接成功!"+conn);}catch(Exceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){getConnection();}上面的代码中,我们使用类名通过反射加载数据库的驱动,然后通过DriverManager获取对应的连接。mysql和orcal都是这样,下面我们就来探讨下DriverManager是如何获取连接的。上述代码中,通过遍历registeredDrivers获取对应的注册驱动。那么他是怎么得到的呢?也就是说一旦这个驱动像驱动管理DriverManager一样注册了我们的驱动。而我们通过反射指定类名来加载mysql驱动,所以我们也会得到mysql对应的链接
