其实工厂模式跟策略模式有点相似,只不过,策略模式是通过中Contex调用具体实现类的相应方法,而工厂模式是生成实现类的实例。
package com.pocketdigi.patterns.factory;
public interface Human {
public void laugh();
public void cry();
}
package com.pocketdigi.patterns.factory;
public class YellowHuman implements Human {
/**
* 不加public 使得在外包无法new
*/
YellowHuman()
{
}
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("黄色人种笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("黄色人种哭");
}
}
package com.pocketdigi.patterns.factory;
public class BlackHuman implements Human {
/**
* 不加public 使得在外包无法new
*/
BlackHuman()
{
}
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("黑色人种笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("黑色人种哭");
}
}
工厂:
package com.pocketdigi.patterns.factory;
public class HumanFactory {
public static Human createHuman(Class c)
{
try {
Object obj=c.newInstance();
return (Human)obj;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static BlackHuman createBlackHuman()
{
return (BlackHuman)createHuman(BlackHuman.class);
}
public static YellowHuman createYellowHuman()
{
return (YellowHuman)createHuman(YellowHuman.class);
}
}
调用:
Human human=HumanFactory.createHuman(YellowHuman.class);
human.laugh();
HumanFactory.createBlackHuman().laugh();