工厂模式、控制反转及依赖注入
工厂模式、控制反转及依赖注入
//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; } }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |