robot.java
package test.robot;
public class robot{
// public static void main(String[] args){
// robotFactory robotfactory=new robotFactory();
// robot robot=robot.getRobot(3);
// robot.Speak("Hello,world! my name is "+robot.name);
// }
public String name;
public String color;
public double height;
public double width;
public double weight;
private robot(String name,String color,double height,double width,double weight){
this.name=name;
this.color=color;
this.height=height;
this.width=width;
this.weight=weight;
}
public static robot getRobot(int robotType){
robot robot;
switch(robotType){
case 0:
robot=new robot("robot0","red",1,2,3);
break;
default:
robot=new robot("robotdefault","blue",3,3,3);
break;
}
return robot;
}
public void Speak(String msg){
System.out.println(msg);
}
}
robotFactory.java
package test.robot;
public class robotFactory{
public static void main(String[] args){
robot Robot=robot.getRobot(0);
Robot.Speak("Hello,world! my name is "+Robot.name);
}
}
注意!这里有两个细节:
1) Robot2的构造方法是private的,这样的好处就是所有Robot2的使用者或者说是实现类在获取机器人的时候,只能通过getRobot2来获取,这样就实现了规范化,而不是有些地方是直接new的,有些地方是用getRobot方法来的(一个项目,不一定就是一个程序员写到老的...)。
2) Robot2获取实例的getRobot方法是static静态的(所以才叫静态工厂嘛~)!由于Robot2的构造函数是private的了,不能直接new一个实例,那就更加不可能调用需要实例化才能使用的getRobot方法了,所以必须要设置为static方法,就可以无需实例化直接调用!