需求,妇娲做做各人各样的人,黄色人,白色人,黑色人。。。。,如果一个new得累死
1,先定义一个Human接口,然后再根据人种去实现它
<span style="font-family: Arial, Helvetica, sans-serif;"></span>
* 人类接口
* @author xieyang
*
*/
public interface Human {
/**
* 不同的人,笑是不一样的
*/
public void laugh();
/**
* 哭
*/
public void cry();
/**
* 说话
*/
public void talk();
/**.....**/
}
定义一个黄种人
public class YellowHuman implements Human {
private static final String TAG = "Human";
@Override
public void laugh() {
Log.i(TAG,"YellowHuman laugh");
}
@Override
public void cry() {
Log.i(TAG,"YellowHuman cry");
}
@Override
public void talk() {
Log.i(TAG,"YellowHuman talk");
}
}
定义一个白种人
public class WhiteHuman implements Human {
private static final String TAG = "Human";
@Override
public void laugh() {
Log.i(TAG,"WhiteHuman laugh");
}
@Override
public void cry() {
Log.i(TAG,"WhiteHuman cry");
}
@Override
public void talk() {
Log.i(TAG,"WhiteHuman talk");
}
}
定义一个黑种人
public class BlackHuman implements Human {
private static final String TAG = "Human";
@Override
public void laugh() {
Log.i(TAG,"BlackHuman laugh");
}
@Override
public void cry() {
Log.i(TAG,"BlackHuman cry");
}
@Override
public void talk() {
Log.i(TAG,"BlackHuman talk");
}
}
2,定义人类的工厂类,主要是利用反射,创建实例
/**
* 造人工厂
* @author xieyang
*
*/
public class HumanFactory {
private static final String TAG = "HumanFactory";
/**
* 指定创建草某类人
* @param c
* @return
*/
public static Human createHuman(Class<? extends Human> c){
Human human = null;
try {
human = (Human) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
Log.e(TAG,"做人出错!!!");
} catch (IllegalAccessException e) {
Log.e(TAG,"做人定义有错!!!");
} catch (ClassNotFoundException e) {
Log.e(TAG,"没法找到你要定义的人类!!!:"+c.getName());
}
return human;
}
}
3,Client调用工厂创建人类
public void createHuman(View view) {
Human yellowHuman = HumanFactory.createHuman(YellowHuman.class);
yellowHuman.cry();
yellowHuman.laugh();
yellowHuman.talk();
}
通单简工厂模式,很容易方便地创建,不同的实例对像,这种模式是利用类的多态的特征。