简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
一、实现
(一)抽象产品
/**
* 抽象人类,四个属性
* @author EX-SONGTIANXI001
*
*/
public interface Human {
/*笑*/
public void laugh();
/*哭*/
public void cry();
/*说话*/
public void talk();
}
(二)具体产品
public class WhiteHuman implements Human{
/*笑*/
public void laugh(){
System.out.println("白种人笑");
};
/*哭*/
public void cry(){
System.out.println("白种人哭");
};
/*说话*/
public void talk(){
System.out.println("白种人说话");
};
}
public class YellowHuman implements Human{
/*笑*/
public void laugh(){
System.out.println("黄种人笑");
};
/*哭*/
public void cry(){
System.out.println("黄种人哭");
};
/*说话*/
public void talk(){
System.out.println("黄种人说话");
};
}
public class BlackHuman implements Human{
/*笑*/
public void laugh(){
System.out.println("黑种人笑");
};
/*哭*/
public void cry(){
System.out.println("黑种人哭");
};
/*说话*/
public void talk(){
System.out.println("黑种人说话");
};
}
(三)具体工厂
/**
* 工厂方法模式
* @author EX-SONGTIANXI001
* 1、此实现符合开-闭原则,新增一种子产品时候不需要修改工厂类的逻辑
* 2、使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构
* 3、不符合单一职责原则,所有的产品在一个工厂里面生产,一旦改工厂不能工作则整个系统不能工作
*/
public class HumanFactory {
/*定义一个创建人类的方法*/
@SuppressWarnings("rawtypes")
public static Human creatHuman(Class c){
/*定义一个接口类型的参数*/
Human human = null;
try{
human = (Human)Class.forName(c.getName()).newInstance();
}catch(InstantiationException e){
System.out.println("必须实现Human接口的方法");
}catch(IllegalAccessException e){
System.out.println("实现的方法有问题");
}catch(ClassNotFoundException e){
System.out.println("找不到已实现的人种");
}
return human;
}
public static void main(String[] args){
Human whiteHuman = HumanFactory.creatHuman(WhiteHuman.class);
whiteHuman.cry();
}
}