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方法,就可以无需实例化直接调用!