工厂方法模式中接口问题

[code="java"]

interface Car{
public void start();
public void stop();
}

class Benz implements Car{
public void start(){
System.out.println("Benz开动了。。。。");
}
public void stop(){
System.out.println("Benz停车了。。。");
}
}

class Ford implements Car{
public void start(){
System.out.println("Ford开动了。。。。");
}
public void stop(){
System.out.println("Ford停车了。。。");
}
}

class BigBus implements Car{
public void start(){
System.out.println("大巴开车了。。。。");
}
public void stop(){
System.out.println("大巴停车了。。。。");
}
}

class MiniBus implements Car{
public void start(){
System.out.println("小巴开车了。。。。");
}
public void stop(){
System.out.println("小巴停车了。。。。");
}
}

/**
*这个接口有什么用途?
*如果去了这个接口,下面CarFactory和BusFactory都不实现这个接口功能是一样的?怎么理解这个接口?
*/
interface AbstractFactory{

}

class CarFactory implements AbstractFactory{
public Car getCar(String type){
Car c=null;
try {
c=(Car)Class.forName("org.jzkangta.factorydemo02."+type).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
}

}

class BusFactory implements AbstractFactory{
public Car getBus(String type){
Car c=null;
try {
c=(Car)Class.forName("org.jzkangta.factorydemo02."+type).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
}

}

public class Factorydemo02 {

public static void main(String[] args) {
    //CarFactory cf=new CarFactory();
    BusFactory bf=new BusFactory();
    Car c=null;
    //c=cf.getCar("Benz");
    c=bf.getBus("BigBus");
    c.start();
    c.stop();
}

}

[/code]

你想实现的是工厂方法模式吧,不过你这样写我很无语。

那个接口是标识性的接口,只是用来为个具体的产品角色提供一个共同类型而已。

你那个 public inteface AbstractFactory{}[b]标识性接口[/b]一直到最后的代码可以改写成这样。

//定义一个工厂接口提供公用的工厂方法

[code="java"]
public interface AbstractFactory{

 /**
  * 工厂方法
  */
 Car factory();    

}

//定义小汽车的实现

public class SmallCar implements  Car{
 public SmallCar (){
  system.out.print("我的小汽车");
 }

}

//定义公共汽车实现
public class Bus implements  Car{
 public Bus (){
  system.out.print("我的公共汽车");
 }

}

//定义小汽车的实现

public class Car implements  Car{
 public Car(){
  system.out.print("我的小汽车");
 }

}

[/code]
//首先提供一个具体产品的标示性接口
public interface Car(){
}
[code="java"]

class CarFactory implements AbstractFactory{

public Car getFactory(){   
    return new  CarFactory();
}   

}

class BusFactory implements AbstractFactory{ 

public Car getFactory(){   
    return new  BusFactory ();
}      

}

//好了具体工厂方法调用
public class factoryTest(){
private static AbstractFactory carFactory ,busFactory ;
private Car smallCar,busCar;
public static void main(String[] args) {

 //调用小汽车
  carFactory =new CarFactory ();
  smallCar=carFactory .getFactory();

  //调用公共汽车
  busFactory =new BusFactory ();
  busCar=busFactory.getFactory();

 } 
}

[/code]

去了方法 接口还有什么意义 ?
接口用来抽象 你抽象了什么?
按你的想法 把Map里方法都去了吧
去了以后你知道这种类型的东西有什么特性?