传统的工厂类每新增加一个子类时,都需要去修改工厂类,让它去产生一个新增子类的对象。这样就非常麻烦。解决此问题的关键在于实例化对象的方式new上,如果使用反射去实例化对象就可以很好的解决这个问题,以下是代码实例:
nterface Phone{
public void BuyPhone();
}
class XiaoMi implements Phone{
@Override
public void BuyPhone() {
System.out.println("国产小米!");
}
}
class Iphone implements Phone{
@Override
public void BuyPhone() {
System.out.println("买个苹果玩玩!");
}
}
class PhoneFactory{
private PhoneFactory(){}
public static Phone getInterface(String classname) {
Phone phone = null;
try {
//利用反射实例化对象
phone = (Phone) Class.forName(classname).newInstance();
}catch(InstantiationException | IllegalAccessException
| ClassNotFoundException e) {
e.printStackTrace();
}
return phone;
}
}
public class text_1 {
public static void main(String[] args) {
Phone phone = PhoneFactory.getInterface("XiaoMi");
Phone phone1 = PhoneFactory.getInterface("Iphone");
phone.BuyPhone();
phone1.BuyPhone();
}
}
如上如果要新加子类的话,只需将子类名传入工厂类中就会将其实例化,无需修改工厂类的代码。