工厂模式、控制反转及依赖注入
? 工厂模式、控制反转及依赖注入
//Book接口 public interface IBook{ ?? ?public void learn(); } //BookA实现类 public class BookA implements IBook { ?? ?public void learn(){ ?? ? ? ?System.out.println("学习BookA"); ?? ?} } //BookB实现类 public class BookB implements IBook { ?? ?public void learn(){ ?? ? ? ?System.out.println("学习BookB"); ?? ?} } ? public class Student { ?? ?public void learnBookA(){ ?? ? ? ?IBook book = new BookA(); ?? ? ? ?book.learn(); ?? ?} ?? ?public void learnBookB(){ ?? ? ? ?IBook book = new BookB(); ?? ? ? ?book.learn(); ?? ?}? } ?
//图书工厂 public class BookFactory{ ?? ?public static IBook getBookA() { ?? ? ? ?IBook book = new BookA(); ?? ? ? ?return book; ?? ?} ?? ?public static IBook getBookB() { ?? ? ? ?IBook book = new BookB(); ?? ? ? ?return book; ?? ?} } //学生类 public class Student { ?? ?public void learnBookA(){ ?? ? ? ?IBook book = BookFactory.getBookA(); ?? ? ? ?book.learn(); ?? ?} ?? ?public void learnBookB(){ ?? ? ? ?IBook book = BookFactory.getBookB(); ?? ? ? ?book.learn(); ?? ?} } ?
public class Student{ ?? ?private IBook bookA; ?? ?public init(){ ?? ? ? ?bookA = (IBook)Class.forName("BookA").newInstance(); ?? ?} } ? ? public class Student { ?? ?private BookA bookA; ?? ?public Student (BookA booA){ this.bookA = bookA; ?? ?} ?? ?public void learn() { bookA.learn(); ?? ?} } public class Factory { ?? ?public static getInstance(){ Class clazz = BookA.class; ? ?//创建类BookA的Class对象 Class[] param = new Class[]{BookA.class}; try{ ?? ? Constructor con = clazz.getConstructor(param); ?? ? BookA bookA = (BookA)con.newInstance(str); ?? ? Student student1 = new Student(bookA); }catch (Exception e){ ?? ? e.printStackTrace(); } return student1; ?? ?} } ?
public class Student { ?? ?private BookA bookA; ?? ?public BookA getBookA(BookA booA){ return bookA; ?? ?} ?? ?public void setBookA(BookA booA){ this.bookA = bookA; ?? ?} ?? ?public void learn() { bookA.learn(); ?? ?} } public class Factory { ?? ?public static getInstance(String fieldName){ Class clazz = BookA.class; ? ?//创建类BookA的Class对象 Class student = Student.class; Class[] param = new Class[]{BookA.class}; try{ ?? ? Method method = student.getMethod("set"+change(fieldName),param); ?? ? BookA bookA = (BookA)clazz.newInstance(); ?? ? BookA[] book = new BookA[] {bookA}; ?? ? Object obj = student.newInstance(); ?? ? method.invoke(obj,book); ?? ? Student student1 = (Student) obj; }catch (Exception e){ ?? ? e.printStackTrace(); } return student1; ?? ?} ?? ?public static String change(String str) { String subString = str.substring(0,1); subString = subString.toUpperCase(); str = str.substring(1,str.length()); str = subString + str; return str; ?? ?} } ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |