zhe_bu_shi_majia 2010-07-22 14:45
浏览 251
已采纳

工厂方法模式中接口问题

[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]

  • 写回答

2条回答 默认 最新

  • iteye_15772 2010-07-25 12:16
    关注

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

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

    你那个 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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路