packagetop.zynorl.csdnDemo.factory;/**
* Created by zynorl on 2023/9/14 10:24
*/classStaticFactory{privateStaticFactory(){}staticIBookgetInstance(String className){if("math".equalsIgnoreCase(className)){returnnewMathBook();}elseif("program".equalsIgnoreCase(className)){returnnewProgramBook();}else{returnnull;}}}publicclassStaticFactoryTest{publicstaticvoidmain(String[] args)throwsException{IBook book =StaticFactory.getInstance("program");
book.read();}}
2. 反射与工厂
packagetop.zynorl.csdnDemo.factory;/**
* Created by zynorl on 2023/9/14 10:41
*/classReflectFactory{privateReflectFactory(){}publicstaticIBookgetInstance(String className){// 必须传递类的完整名称try{// 直接实例化对象Object obj =Class.forName(className).getDeclaredConstructor().newInstance();if(obj instanceofIBook){// 为了防止出现ClassCastExceptionreturn(IBook) obj ;// 强制性的向下转型}returnnull;}catch(Exception e){returnnull;}}}publicclassReflectFactoryTest{publicstaticvoidmain(String[] args)throwsException{IBook book =ReflectFactory.getInstance("top.zynorl.csdnDemo.factory.ProgramBook");
book.read();}}
/**
* Created by zynorl on 2023/9/14 10:55
*/@Target({ElementType.CONSTRUCTOR})// 此注解可以应用在类定义上@Retention(RetentionPolicy.RUNTIME)// 在当前执行的时候此Annotation生效public@interfaceFactory{// 指定工厂publicStringvalue();// value可以避免编写变量名称}
/**
* Created by zynorl on 2023/9/14 10:55
*/@Target({ElementType.CONSTRUCTOR})// 此注解可以应用在类定义上@Retention(RetentionPolicy.RUNTIME)// 在当前执行的时候此Annotation生效public@interfaceFactory{// 指定工厂publicStringvalue();// value可以避免编写变量名称}