请教大家一个问题,为了描述方便我换成了伪代码:
public class A {
private AA aa;
private BB bb; public Object A() {
if (条件成立) {
aa = new AA();
// 省略N行代码
} else {
bb = new BB();
// 省略N行代码
}
} }因为省略部分都是一样的,而且代码颇多,所以我想写一个方法,根据条件返回相应的对象,不知道行否。
public class A {
private AA aa;
private BB bb; public Object A() {
if (条件成立) {
aa = new AA();
// 省略N行代码
} else {
bb = new BB();
// 省略N行代码
}
} }因为省略部分都是一样的,而且代码颇多,所以我想写一个方法,根据条件返回相应的对象,不知道行否。
class BB extends InterfaceName {}public class A {
public Object A() {
method( 条件成立 ? new AA() : new BB() );
} private void method(InterfaceName arg) {
// ...
}
}
不过返回的对象可以有统一的接口,就是AA和BB实现统一的一个接口。
// 更正如下:
interface InterfaceName { // ...
}
class AA implements InterfaceName { // ...
}
class BB implements InterfaceName { // ...
}public class A {
public Object A() {
return method( 条件成立 ? new AA() : new BB() );
} private Object method(InterfaceName arg) { // ...
}
}
public abstract void method();
}public class AA extends A{
public void method(){
//TODO;
}
}public class BB extends A{
public void method(){
//TODO;
}
}public class AFactory{
public static <T extends A> T createA(Class<T> c){
A a=null;
try{
a=(A)Class.forName(c.getName()).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return (T)a;
}
}public class Client{
public static void main(String args[]){
if(条件成立){
AFactory.createA(AA.class);
}else{
AFactory.createA(BB.class);
}
}
}